I used photon reatime. All game logic and physics are handled on each person’s machine. Messages sent to players in the same room are sent directly via UDP and I do not use any server side code. The photon server is there to set up matches/lobby.
I may have made my game different than most games because I do not have a ‘server’ , each device is a client and server. as a client the location and speed of the boat is determined by local physics and local game logic. A couple times a second I have each boat send it’s current location , direction, and speed to every other boat. I take that data and update all boats using transitionTo as a way of making changes in direction appear to happen smooth. When a user fires their cannon I send a message to all other boats that a cannon was fired, who fired it, where did it start and where should it end.The other devices will then spawn a cannon ball with that data. Only if the cannon ball hits your boat on your local device do I send out data to the other players that my boat was hit. There are times when it might look like you hit the other boat but the few ms difference can give them time to move out of the way.
I do not use any predictive algorithms other than using transitionTo to smooth things over.
I do want to mention when I created the game i started with photon’s example code for Corona. In that example the photon server pointed to is one in the UK. I’m in the US. All my tests and tweeks were based on the latency of the UK server. Once I noticed this and changed over the to US server things got even better. That change has not been pushed to the Play store so the game is still using the UK server with minimal latency.
The game can have 8 players in a game at once where player 9 creates a new game field. It is possible that with a full game of 8 the latency issues might start popping up, but I have had little opportunity to test with so many devices at once.
Chris