Mehr/ kleine oder Weniger/ große Pakete?

staxx6

Mitglied
hi!,

ich hab da mal eher eine Grundlegende frage zum Bezug Netzwerk-Pakete UDP.
Zum Hintergrund: Ich programmiere ein Jump and Run Game, welches auch mit mehreren Spielern
bestreiten lässt/ soll. Weil es eher ein Aktion lastiges Spiel wird, werden Positionen der Spieler per UDP versendet.
Und hier springt auch schon meine Frage rein: Ist es sinnvoller von jedem Spieler (Server seitig) einzelne Paket zu senden. Sprich: 4 Spieler auf dem Server und der Server sendet 16 Pakete, 4 für jeden Client.

Oder die Daten der 4 sammeln und pro Client nur ein Paket(großes) senden.
Ich schätze mal das der Verlust eines großen Paketes genau so zu verkraften ist wie bei den kleinen.

- Die frage beschränkt sich jetzt nicht nur auf 4 Spieler (schätze mal sonst wär das bei der Größenordnung egal. ;)), sondern eher Allgemein.
 

tribalup

Bekanntes Mitglied
Ich denke es ist immer besser viele kleine pakete zu verwenden und zudem natürlich für jeden Client einzeln.
Wie du selber schon sagst, sind es nicht nur 4 Clients. Mit dem Ansatz eines größeren Paketes für alle Clients wirst du schnell an die Grenzen stoßen.
 

Empire Phoenix

Top Contributor
Viele kleine packete überfoden viele schrott router. große packee werden teilweise einfach gedroppt von routuner wenn der mtu kleiner ist. Willkommen in der hölle.
 

Ullenboom

Bekanntes Mitglied
Die Frage ist schon, was meinst du mit groß? Die maximale UDP-Paketgröße ist sowieso "nur" 64 KiB. Wenn es Steuerkommandos von ein paar Byte sind, dann kannst du sie zusammenfassen, aber klar ist, dass man dann ja für das Sammeln warten muss, und das bringt eine Verzögerung mit sich. Ein 2 KiB Paket wird aber, wenn es nicht fragmentiert wurde, im Prinzip genauso schnell übertragen wir ein 64 KiB Paket. Doch eine Lösung, die das Netzwerk weniger belastet, ist im Grunde vorzuziehen.
 

staxx6

Mitglied
Tatsächliche größe weis ich sogar nicht so wirklich, deswegen haben ich die Frage auch weit gegrifen formuliert. Bin gemein ich weis. :p
Der Grund ist einfach das ich mir "Kryonet" arbeite (was ich vorher posten könnte..) und da ist es halt schwer genau zu sagen wie groß die Pakete sind. Prinzipiel ist es aber ja klar wann diese größer oder kleiner sind.
 

Kr0e

Gesperrter Benutzer
64kib er kommen in der praxis fast nie an, realistisch sind 512 bis 1500 bytes. der rest wird zu oft gedroppt.



Bist du dir da sicher ? Ich vermute mal, du hast dich damit schon ausführlich beschäftigt, dass du sowas pauschalisierst... Aber ich wäre mit solchen Formulierungen eher vorsichtig, meines Wissens werden Pakete nur gedroppt wenn eine ÜBerlast im Netz vorliegt. Sprich solange es keine Überlast gibt, sollte es im Idealfall zu keinem einzigen Drop kommen.

Vom Gefühl her würde ich mich vermutlcih auch nicht exakt an der 64k Grenze bewegen sondern tendenziell eher darunter.. Aber direkt auf 1500 runter zu gehen halte ich dann doch für übertrieben.

Wenn es Daten sind, die du zusammenfassen kannst, dann tuhe dies. Und typischerweise solltest du mit einem Spiel sowieso nciht an die 64k Grenze pro PAket kommen... Das würde bei 33 Paketen pro Sekunde auf Dauer vermutlcih sowieso nicht funktionieren.

FAzit: Bei deiner Aufgabe würde ich es soweit zusammenfassen wie es nur geht. Du solltest da eigentlcih nichtmal über 1500 drüberkommen wenn du geschickt serialisierst.

Gruß,

Chris

PS: Zuviele Pakete haben eine höhere Chance in der falschen Reihenfolge anzukommen, bzw doppelt/garnicht. Bei weniger Paketen ist dies natürlich schon direkt geringer.


Aber kann natürlich sein, dass Empire Phoenix recht hat und UDP noch schlechter ist, als ich dachte. Wobei ich das nach wie vor bezweifle.
 

Empire Phoenix

Top Contributor
Theoretisch hast du recht,

praktisch verstößt es nicht gegen die spezifikation einfach packete die einem nicht gefallen zu droppen.
Und viele (home) router verwerfen dann packete die größer als der mtu sind.
(512 btw ist die minimale größe) die unterstützt werden muss.

Versuch mal durchs internet 20kb packete zu übertragen, je nach provider router und pfad kommt nicht ein einizges an.


Hatte genau das problem beim netzwerk nämlich beim laden der welt was inital mit einem großen (naja 5kb) packet lief und jetzt mit mehreren einzelen packeten laufen muss.

Irgetwann werde ich wohl mal bei mir nen test am start einbauen der einfach immer größere packete schickt bis die ersten gedropt werden aufgrund der größe, damit ich das optimierter amchen kann je nach client.
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben