I recently participated in the development of a game that more or less used the same messaging approach. That is, having a remote server listening on a port somewhere, and then several clients connecting to it and sending messages back and forth.
However, this was done in Python, and since we did not want to rely on any external libraries, we wrote about our own actors and the remote messaging system on top of them. As it turned out, there were several performance issues, but I think that they were mainly related to Putin's Pythons method (and our lack of understanding of this). Tests for Scala Actors or Akka always did better numbers than what we could do in Python.
Synchronization was not a big problem for us, at least in the game itself. But then we did not have so much data to exchange, and it was a round-based game. Thus, each client was requested one after another, and if there was a timeout, then the next client will be requested. In our problem, clients only reacted to what the server presented to them. This may, however, not be the best solution in a more real game.
In real time, you can have an incoming queue (Actor) on the server to receive all client moves and, possibly, have a separate channel for the game state to avoid blocking. For synchronization, this would be much more complicated. It depends on how quickly you need updates.
source share