Netzwerkcode für Onlinespiel
-
Hi,
sorry, falls es nervt, aber ich muss nochmal fragen.
Ich stehe nun vor der Frage, ob ich für mein Onlinespiel TCP oder UDP verwenden soll. Im Chat wurde mir geraten, mir mal das OpenSource-Online-MMORPG Planeshift anzuschauen.
Das hab ich jetzt auch getan und was mich dort sehr verwundert, ist, dass sie dort für das gesamte Spiel ausschließlich UDP mit einem selbstprogrammierten Paketbestätigungsmechanismus verwenden. So wie ich das sehe (allerdings ist der Code sehr groß und unübersichtlich, ich bin noch nicht so wirklich dahintergestiegen), verwenden sie auch ein UDP-Paket immer für einige bzw. viele Game Messages, die jeweils nur wenige Bytes groß sind.
Aber ist das wirklich der richtige Weg?
Oder anders gefragt, was würdet ihr machen, nur bei Veränderung die Veränderung per TCP schicken oder dauernd per UDP den aktuellen Status an Clients durchgeben?
Und wie viel langsamer ist TCP im Vergleich zu UDP?
ChrisM
-
generell kann man das nicht sagen, was man nehmen soll. Wenn es runden basiert ist, würde ich zB. TCP nehmen, weil man dann eben am Ende jeder Runde die Daten überträgt und es dann nicht auf ms ankommt.
-
Wenn du die Daten hinterher sortierst und bei verloren gegangenen Daten noch nachfragst, kannst du statt UDP auch gleich TCP nehmen, würde ich mal vermuten...
Warum schreibst du nicht erst mal ein kleines Testspiel, bevor du mit riesiger Vorausplanung alles perfekt machen willst?
-
Hi,
erstmal danke für eure Antworten!
ich hab ja schon für beides Testanwendungen geschrieben, nämlich einen HTTP-Client (nix besonderes, nur Konsole) und -Server (auch nur Konsole und nur GET-Unterstützung) für TCP und eine Art Reaktionstestprogramm mit UDP.
Nur weiß ich nicht, wie es mit Geschwindigkeit, Zuverlässigkeit und vor allem Packet Loss (hab gehört bei Fastpath soll die extrem hoch sein!) von UDP über Internet steht und ob es überhaupt Sinn macht, sich ein UDP-System zu programmieren, wenn man eh Bestätigungmessages bei wichtigen Paketen (nicht bei allen!) sendet.
@kingruedi: Nein, ist MMORPG in Echtzeit
ChrisM
-
Spricht denn eigentlich etwas dagegen, die wichtigen Sachen per TCP und die unwichtigen per UDP zu verschicken? So lief das bei mir damals. Mit mehr als sieben Leuten gleichzeitig haben wir allerdings auch nie gespielt
-
Hi,
nein, da spricht theoretisch nichts dagegen, nur muss der Server dann entweder noch mehr Threads haben oder noch mehr recv()-Aufrufe tätigen -> langsamer.
Und ich dachte eher an 70 oder mehr Spieler statt 7
ChrisM
-
Und ich kann mir nicht einmal vorstellen, dass man bei 70 Spielern viel davon merkt, 140 asynchrone Sockets zu verwenden.
-
Hi,
naja, dann versuche ich jetzt einfach UDP mit Bestätigungssystem für das Spiel an sich und TCP für den Updater zu verwenden.
ChrisM
-
Hi,
falls es noch jemand interessiert:
http://www.planeshift3d.com/wbboard/thread.php?threadid=6709&boardid=13&styleid=3ChrisM