Monday, July 24, 2017

java - Why is there a huge update-delay in my client/server code?


I'm working on my Java game with Libgdx and having trouble with the network code. I can create a server, make multiple clients connect to it, but there is a huge delay between the player's input and the movement.


This is basically how it should work:




  1. SERVER: (Launch and listen to connection.)

  2. CLIENT: I want to connect

  3. SERVER: OK, here is the map and all other data

  4. CLIENT: I pressed "D"

  5. SERVER: OK, I move this player, here is your position

  6. CLIENT: I received my position


On the 2 last steps, when I pressed an input, the server gets it correctly and updates the position and immediately sends the position to the player, but here is my problem:


Server log (the numbers are X- and Y-coordinates):



Sat Sep 20 18:49:16 CEST 2014 : Send 2356.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Send 2358.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Send 2360.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Send 2362.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Send 2364.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Send 2366.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Send 2368.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Send 2370.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Send 2372.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Send 2374.0 1376.0

Sat Sep 20 18:49:17 CEST 2014 : Send 2376.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Send 2378.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Send 2380.0 1376.0

Client log:


Sat Sep 20 18:49:16 CEST 2014 : Receive : 2336.0 1376.0 
Sat Sep 20 18:49:16 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Receive : 2336.0 1376.0

Sat Sep 20 18:49:16 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:16 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Receive : 2336.0 1376.0
Sat Sep 20 18:49:17 CEST 2014 : Receive : 2336.0 1376.0

As you can see, the player receives the data at the wrong moment. Here is when the client start to receive



Sat Sep 20 18:49:18 CEST 2014 : Receive : 2336.0 1376.0 
Sat Sep 20 18:49:18 CEST 2014 : Receive : 2338.0 1376.0
Sat Sep 20 18:49:18 CEST 2014 : Receive : 2340.0 1376.0
Sat Sep 20 18:49:18 CEST 2014 : Receive : 2342.0 1376.0
Sat Sep 20 18:49:18 CEST 2014 : Receive : 2344.0 1376.0

As you can see, there is almost a 2 seconds of delay (something like 1.6 / 1.7s).


This is how I send/receive data:


Sending:


synchronized(this.gestionPlayers) {

for(GestionPlayer gp : this.gestionPlayers) {
if(this.serializablePlayer.size() > 0)
gp.sendPlayer(this.serializablePlayer);
}
}

sendPlayer function:


try {
this.objectOut.writeObject(sp);
this.objectOut.reset();

} catch (IOException e) {
this.actif = false;
e.printStackTrace();
}

Receiving:


Vector p =
(Vector) this.objIn.readObject();
this.map.addNewPlayers(p);
this.map.multiplayerRender();


SerializablePlayer contains the player's ID and coordinates.


If you need more information, just ask. This is the last step in my multiplayer game and I'd be happy if you could help me! :)




No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...