2017-01-23 10 views
0

Das Spiel im Entwickeln wird derzeit verwendet ServerSocket und Socket, um den Multiplayer bereitzustellen. Wenn ich nicht lokal laufe, ist es sehr viel zu spät, also frage ich mich, ob ich die Multiplayer-Struktur über TCP (ServerSocket, Socket) und UDP (DatagramSocket) neu erstellen sollte. Derzeit wie ich erwähnt bin nur mit TCP und es ist nur rund 60 Pakete pro Sekunde senden (30 empfangen und 30 gesendet), wenn nicht lokal lief.Multiplayer Game Networking

Informationen, die zwischen Server und Client gesendet werden:
Bewegung, Handel, ItemUsage, EnvironmentDetails und mehr Zeug.

Also meine Fragen sind:

Wäre es einen großen Unterschied machen, wenn ich TCP und UDP beide TCP statt nur verwendet?

Wenn ich zu TCP und UDP wechselte, was sollte ich in jedem Protokoll senden?

Vielen Dank im Voraus!

Edit:

Auftraggeber:

Instancing: this.out = new ObjectOutputStream(new BufferedOutputStream(this.requestSocket.getOutputStream())); this.in = new ObjectInputStream(new BufferedInputStream(this.requestSocket.getInputStream()));

Senden:

this.out.writeObject(temp.toString()); this.out.flush(); Temp ist ein JSONObject

Server:

Instancing: this.out = new ObjectOutputStream(new BufferedOutputStream(c.getOutputStream())); this.out.flush(); this.in = new ObjectInputStream(new BufferedInputStream(c.getInputStream()));

Senden: this.out.writeObject(temp.toString()); this.out.flush(); Temp ist ein JSONObject

+0

UDP kann Pakete löschen, sodass Daten verloren gehen können. Wird sich das negativ auf dein Spiel auswirken? Ich könnte sehen, dass es möglicherweise ein Problem ist. – Carcigenicate

+0

Nun, UDP bietet keine Fehlerüberprüfung per se, so dass es in der Theorie schneller sein wird, solange Sie keinen genauen Informationsfluss benötigen. – Mena

+0

Es ist auch möglich, dass es aufgrund Ihres Codes hängt, abhängig davon, wie Ihr Kommunikationscode die Dinge behandelt. Spülen Sie Ihre Streams? In welchem ​​Format senden Sie Daten usw. – Kayaman

Antwort

0

Wäre es einen großen Unterschied machen, wenn ich TCP und UDP statt TCP nur verwendet?

Ja. Sie werden eine viel bessere Leistung feststellen, wenn Sie UDP verwenden, um den Status des Spiels zu aktualisieren, da die Datenüberprüfung nicht stattfindet. Das UDP-Paket wird ausgelöst und dann vergessen.

Um die Leistung zu erhöhen, begrenzen Sie die Datenmenge, die Sie senden. Wenn Sie JSON senden, ist jedes Zeichen ein vollständiges Byte. 30 Updates pro Sekunde sind möglicherweise zu hoch, weil das alle 33,3 Millisekunden aktualisiert wird. Um dies zu relativieren, wird ein 60-Hz-Monitor nur alle 16,7 Millisekunden aktualisiert.

Wenn ich zu TCP und UDP wechselte, was sollte ich in jedem Protokoll senden?

TCP wird normalerweise verwendet, wenn Sie sicherstellen müssen, dass Ihre Daten zum Server oder Client gelangen.UDP wird verwendet, wenn Sie Geschwindigkeit wünschen und potentiell mit verlorenen Paketen umgehen können. Wenn Sie UDP verwenden, müssen Sie den potenziellen Paketverlust in Ihrem Code berücksichtigen.