Thanks for the kind words. It’s just getting started, so be sure to stick around. Open to any and all suggestions as well.
http://forums.coronium.io/categories/coronium-gs
Cheers.
Thanks for the kind words. It’s just getting started, so be sure to stick around. Open to any and all suggestions as well.
http://forums.coronium.io/categories/coronium-gs
Cheers.
I’ve posted some development guides for Coronium GS to help developers get up and running quicker.
Client-side development document
Server-side development document
If you find something that you think should be added, let me know.
Cheers.
awesome chris. really awesome. now i also need to start thinking of a real time multiplayer corona game
I’ve put together over 2 1/2 hours of training videos on how to use Coronium GS.
You can find it here: http://www.develephant.net/mastering-coronium-gs/
Enjoy!
Hi,
A front-end for Coronium GS is taking shape. You can install it now if you’re using 1.92 or better.
http://www.develephant.net/coronium-gs-panel/
Enjoy!
I’ve put together over 2 1/2 hours of training videos on how to use Coronium GS.
You can find it here: http://www.develephant.net/mastering-coronium-gs/
Enjoy!
Hi,
A front-end for Coronium GS is taking shape. You can install it now if you’re using 1.92 or better.
http://www.develephant.net/coronium-gs-panel/
Enjoy!
What if I make some mistakes in server-side coding that causes the server crash, what happens in this case?
I don’t mean to make mistakes but as you know, it happens.
Should I implement some scripts to bring up the server again? Or any suggestion?
What if I make some mistakes in server-side coding that causes the server crash, what happens in this case?
I don’t mean to make mistakes but as you know, it happens.
Should I implement some scripts to bring up the server again? Or any suggestion?
Hi, has anyone been able to go live in production with Coronium GS?
It seems to be able to run OK on good wi-fi connection but I’ve been struggling with cellular connection. Lots of mobile users have un-stable connection and Coronium GS has very little functionality to handle this properly.
I’ve tried to simply increase timeout numbers on the client but this does not solve the issue and despite being TCP based, I’m losing critical messages to the client.
If someone managed to issue a productive game with this engine, I’d appreciate any help on how to properly setup the system to get robust communication.
When cellular connection is not stable, and you are saying you are losing critical messages to the client, what do you mean? You mean some message dropped? or the client dropped? or?
Could you explain more about the situation? and what kind of handling do you expect Coronium GS to do?
Hi,
I mean that messages sent to the client are not received. The client still has connection to the server, but the message is lost. Instead we sometime get a timeout error on the socket.select method. This is despite setting the timeout to 10 seconds (vs the default 0).
I don’t have project go live with Coronium GS yet but I have the intention to use it for my next project. So I am interested in finding out if the server has any problem.
Please don’t mind that I am not an expert about it, but I do have experience with networking before (I was an engineer of an VoIP server).
So in your case… I still don’t clearly get the whole picture of the problem you are seeing
The client still has the connection to the server… how do you know?
If the connection is still there, why is message to the client is lost?
You get a timeout error sometimes. Does it mean the connection is lost or what does it mean to you?
Hi joe528,
I’m sure you have far more knowledge than me about networking. Regarding your questions:
I do not see any disconnect error on the server or client. its mostly time out messages. Also, some of the messages we lose do not cause the complete halt of the game (there only few critical points where the message ask the user for input and without it the game halts), so in that case we see a message timeout and then the next message arrives.
I do not know. it does not make sense as tcp protocol should guarantee we get it. I know for sure its being sent by the server. I don’t really know what happens on the device until it reaches the app client code. I enlarged the timeout significantly to avoid losing packets but it only partially helps. However, the messages that get lost are often very short, so its probably not that.
Again, I’m not an expert on sockets so I only know I get timeout error on socket.select. why? I can’t tell from the message itself. its just plain “timeout”. I can say that for sure I do not get this at all when I tried local LAN and also I did not get it so far on good WiFi connections.
I had tried Coronium GS for a while but months ago, so maybe I am not totally correct, here are just some ideas for consideration:
Coronium GS is a very basic server. It only handle very basic things, which is good because it provides the flexibility so that all kinds of games/apps can use it.
Hence, it totally depends on your protocol and handling.
I am not sure what you are trying to achieve and what kind of protocols/flows you are trying to implement. My guess is that Coronium GS cannot do much to solve your problem because it is just a basic framework.
For unstable connection, the error handling just has to be done at the application level. You might need to implement state machines for each connection handled by the server and for each client. You cannot assume a message sent will be delivered to a client even if it’s TCP that guarantees a delivery (if connected) because the client might be disconnected at network level from the server and a timeout has happened. And later the client might reconnect to the server after the network assumes (the your application should know this and send the message again).
PS. I am not sure if there is some additional timeout from Coronium GS on addition to the socket timeout. You have to look into the server code (it’s not a lot of code to dig out because the whole framework is very basic). As far as I could remember, the was some timeout from Coronium server I wasn’t expecting. Maybe it closes a connection if no message is sent for a certain time. So it seems there is a option to turn on “ping” in server configuration.
Hi joe528,
Yes, I’m quite familiar by now with the server code as I modified it significantly for the game purposes. However, I did not touch the basic sockets code as I thought there was not much to add there. If I understand correctly I cannot assume delivery even on tcp? so, should I switch to udp and implement checks and retries myself? I read a bit about that and understood its much harder to reach a stable system, especially compared with the effort made into tcp.
the only thing I can think of to counter these issues is to implement another acknowledge layer monitored by the server. Basically send message, expect a return in ~1sec, if not, send again, then again after longer wait and so forth. Actually what tcp already does.
Or is there something better to try?
In socket level, TCP packet delivery is guaranteed. You don’t need to switch to UDP to implement checks and retries.
What you need to do is to implement protocols & controls at application level. It varies a lot and many different kind of implementations. Sometimes it gets quite complicated. So maybe I can’t answer your question after all.
Hi,
@joe528 - First off, thanks for jumping in, it’s very appreciated.
@rune7 - I’m not sure what type of game you’re making, but some ideas:
The main sticking point that has come up with the GS server is to be aware how fast your pushing packets. You can’t use GS for a “true” real time streaming game. It was built with real-time “turn-based” use cases in mind. You can implement your own “throttle” and that may help. The problem becomes an issue when the mobile clients can’t consume the packets fast enough, so it starts holding back messages on the server, which exacerbates the problem.
As far as editing the server code, though simple, there is some cross-pollination between some of the components. As I’m sure you’re also aware, GS is running on Luvit. It’s not straight Lua. so you may find some resources here as well. The maintainer is fairly quick at responding.
All that being said, there are 3 games in the app stores right now that use GS that I know of. I’m not sure what kind of volume they are dealing with, but they are running last I heard.
And don’t forget to check some of the other options available to you:
https://www.photonengine.com/en/Realtime
https://github.com/Overtorment/NoobHub
Cheers.
Hi joe528, develephant,
Thanks for the input.
develephant, If you can point me to developers I’ll try and reach out to them.
Regarding your points:
Yes, the game is turn based genre (although some actions are made in parallel). There is no time pressure on the server as each turn takes ~1-2 minutes and it involves around 8-10 server messages at most. Also messages are spaced to have at least 1 second delay in between.
It seems that there is a connection to the size of the message, which at times is dependent on the amount of players in the game (the game is for 3-8 players). I think that when the connection is not good, either part of the message does not get through or the message is lost somewhere on the way to the app code so the server is not aware the message was lost.
Moving to another backend at this stage will push back the project timetable significantly. I’d like to explore other options before considering another solution.
Here is my two cents. Although mobile network is unstable, I think Coronium GS still can handle real-time streaming for games. It’s really up to the server & client to handle the unstable issue. Unless the unstable issue is preventing such a game to exist in a mobile network. For example, you can never use mobile network to play StarCraft. But if you try it, you still can play, but all players will feel the lag and eventually you will be disconnected because your network just can’t keep up with the game.
Therefore, if your game is not that real time, when a client is disconnected, all other clients should know it. And other clients should either wait for him to reconnect by showing a dialog saying waiting for someone who is not responding and eventually if the disconnection is too long, you have to drop it anyway.
To handle this seamlessly, the logics have to be implemented into the client code (sometimes the server gets involved with it too).