Ich arbeite mit einem Socket-Server und versuche zu entscheiden, wie alle Clients aktualisiert werden sollen.
Ich sende derzeit einige Pakete mit ganzen in JSON serialisierten Objekten. In den meisten Fällen wird dadurch viel Abhören in Form von nicht benötigten Daten hinzugefügt. Dies ist für mich ein Kinderspiel, entfernen Sie die Serialisierung und senden Sie nur das, was benötigt wird.
Nehmen wir an, ich habe vier serverseitige AIs. Sollte ich alle vier AIs in einem riesigen Update senden und daher nur die benötigten Daten serialisieren, oder sollte ich jedes in einem separaten Update senden?
networking
multiplayer
serialization
durchsehen
quelle
quelle
Antworten:
Wenn Sie kleine Nachrichten senden, müssen Sie den Protokoll-Overhead kennen:
Stellen Sie sich vor, Sie senden eine 10-Byte-Nachricht.
Ein TCP-Header ist 24 Byte, ein UDP-Header ist 8 Byte. Angenommen, Sie verwenden UDP, haben Sie insgesamt 18 Bytes.
Sie haben aber auch den IP-Header, der in IPv4 mindestens 20 Byte oder in IPv6 mindestens 40 Byte beträgt. Das sind insgesamt 38 Bytes, wenn Sie IPv4 verwenden.
Und dann haben Sie auch den Ethernet-Frame um all das, was (normalerweise) weitere 42 Bytes sind. Sie sind also bei 80 Bytes. Das ist siebenmal so viel Protokollaufwand wie die von Ihnen gesendeten Daten.
Wie Sie sehen, ist das Senden kleiner Datennachrichten nicht sehr bandbreiteneffizient, da für jede Nachricht Fixkosten von 70 Byte Protokoll-Overhead anfallen.
to visualize this better, seventy bytes is as much data as this string
Es ist jedoch oft auch keine gute Idee, kleine Nachrichten zu verzögern, damit Sie mehr gleichzeitig senden können, da sich das Spiel dadurch verzögerter anfühlt.
Es gibt keine goldene Hammerlösung, um den idealen Kompromiss dafür zu finden. Alle gleichzeitig verfügbaren Daten sollten jedoch in einer Nachricht gesendet werden, anstatt sie in mehrere zu trennen. Es gibt nichts zu gewinnen und viel zu verlieren, wenn unnötige Fragmentierung auf Anwendungsebene hinzugefügt wird.
(Bildquelle: http://en.wikipedia.org/wiki/File:UDP_encapsulation.svg )
quelle
Im Allgemeinen sollten Sie Ihre Pakete klein packen, wenn das Spiel ziemlich groß ist oder viele Updates sendet. Wenn Ihr Spiel jedoch nur klein ist und nur etwas zum Herumspielen und Skalierbarkeit kein großes Problem darstellt, tun Sie einfach, was funktioniert.
quelle