Hallo Ich wollte dir sagen, dass ich Multiplayer für mein Spiel gemacht habe und es funktioniert, aber von 1 Seite Europas zu anderen dauert es 8 Sekunden. Es gibt nicht viel zu senden, es sendet nur ein Objekt mit float x, float y und String username.Java - Socket.writeObject() ist wirklich langsam
Im Server habe ich 3 Threads: Akzeptieren, Senden, Empfangen. Und Client hat senden und empfangen.
Teil des Sende des Servers:
oos = new ObjectOutputStream(new BufferedOutputStream(list_sockets.get(i).getOutputStream()));
int client_state = list_client_states.get(i);
oos.writeObject(client_state);
oos.flush();
oos = new ObjectOutputStream(new BufferedOutputStream(list_sockets.get(i).getOutputStream()));
oos.writeObject(list_data);
oos.flush();
Es ist für Client-ähnlich und hier ist Servers (für den Spieler auch ähnlich) erhalten:
ois = new ObjectInputStream(list_sockets.get(i).getInputStream());
int receive_state = (Integer)ois.readObject();
ois = new ObjectInputStream(list_sockets.get(i).getInputStream());
DataPackage dp = (DataPackage) ois.readObject();
list_data.set(i,dp);
Das ist eine lange Zeit. Hast du eine Netzwerkdiagnose gemacht? Was ist die Ping-Zeit vom Server zu diesem fernen Client? Möglicherweise möchten Sie ein kompakteres Kommunikationsformat wie [protobuf] (http://code.google.com/p/protobuf) oder [Kyro] (http://code.google.com/p/kryo/) verwenden. – Perception
Okay, ich werde sehen, ich habe keine Pinging-Sache und jetzt werde ich sehen, Protobuf und Kyro – IvanDonat