Android-Spiel UDP / TCP?
Sehe ich, dass diese Frage gestellt wurde, bevor aber der Kontext um die Fragen werden in der Regel vage. Ich bin auf der Suche um zu bauen ein Android-multiplayer-Echtzeit-Spiel, wo es global Staates muss geteilt werden zwischen allen clients. So, ich haben eine Tendenz zu glauben, dass UDP-könnte nicht ausreichen. TCP bietet Zuverlässigkeit, sondern mit der inhärenten Gemeinkosten. Da dies jedoch das erste mal, das ich angepackt haben, wie ein problem, ich bin auf der Suche nach feedback von anderen Völker-Erfahrungen.
Daher (in der Regel) im Rahmen eines multiplayer-Echtzeit-Spiel auf einem android-Smartphone, ist der overhead im Zusammenhang mit TCP akzeptabel genug, so dass der Benutzer Erfahrung ist nicht betroffen, um so einen unerwünschten Umfang? Auch ist es erwähnenswert, dass die TCP-Verbindung eine dauerhafte Verbindung. Auch würden UDP-gepaart mit einigen zuverlässigen benutzerdefinierte Mechanismen entwickelt werden, ein besserer Ansatz? Jeder Eingang würde mir wirklich helfen, aus & würde sehr geschätzt werden.
vielen Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die beste Antwort ist wohl "versuchen Sie es und sehen".
Ich bin der Meinung, dass der TCP-overhead ist nicht wirklich so große Sache für die meisten Anwendungen. Header-Größe in der Größenordnung von 10 bytes größer, und ack-Nachrichten werden hin und her gesendet, die für jede Nachricht.
Den echten killer für ein Echtzeit-Spiel wird die Latenz sein. UDP ist Feuer-und-vergessen. Das bedeutet, dass jede Nachricht nur lags durch die transit-Zeit zwischen den beiden Knoten. Da TCP erfordert eine ack-Meldung, eine Nachricht ist nicht wirklich als "gesendet", bis die andere Seite zu hören ist, wieder aus.
Generell das Problem zwischen Ihnen hinausläuft, Fehler-Erkennung. Wenn eine Nachricht verloren geht, in den interwebs irgendwie, wie würden Sie wie es gehandhabt? Wenn jede Nachricht ist ziemlich vital, dann wenn Sie UDP verwenden, Sie würden nur bis zum Ende der Umsetzung Ihrer eigenen TCP-ähnliches Protokoll oben drauf. Sie könnte genauso gut verwenden die TCP-und lassen Sie das Netzwerk-hardware helfen. Allerdings, wenn man die alten Nachrichten nach der Zeit dauert es für mehrere Wiederholungen (jeweils bei der Netzwerk-Latenz) gehen, um Müll sowieso mit neuen updates kommen, dann TCP ist eine Verschwendung von Bandbreite für Sie.
Dies ist nicht wirklich ein android-Frage, obwohl Sie das Protokoll und andere Methoden, die Sie wählen, wird einen Einfluss auf das Gerät (z.B. Akkulaufzeit).
Welches Protokoll zu wählen, hängt hauptsächlich von Ihren Anforderungen (Durchschnittliche Paketgröße Pakete pro Sekunde im Durchschnitt, ob verlorene Pakete sind ein Problem, wie viele Daten Sie senden, auf einmal, ist jitter ein Problem, etc). Kann ich Ihnen ein paar Hinweise, aber.
Hier ein sehr guter Artikel auf der Quake3-networking-Umsetzung:
http://trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
Simpel aber effektiv, ich mag es wirklich sehr und kann nur empfehlen.
Hier ist auch ein guter thread zum Thema:
http://www.gamedev.net/topic/319003-mmorpg-and-the-ol-udp-vs-tcp/
Einige Spiele nutzen UDP (vor allem FPS-und RTS-Arten), einige TCP, und einige von Ihnen eine bestimmte Kombination (z.B. UDP zu senden Spiel-Daten, TCP für chat und andere Sachen). Entweder man kann arbeiten. Sie sollten auch Bedenken, dass die Benutzer gerne arbeiten über 2G -, 3G-oder WiFi-Netzwerken und auch WiFi-Netzwerke werden können und laggy, das über der Kapazität. Ich würde vorschlagen, zu implementieren, die einen schnellen Prototyp und testen Sie es in verschiedenen Netzwerk-Umgebungen.
Ich bin vor dem gleichen problem.
Aus der Literatur habe ich getan, ich schlage vor, Sie Lesen Sie diesen Artikel:
Können Sie sehen, mein Spiel (noch in der Entwicklung) - https://market.android.com/details?id=com.reality.weapons.ak47
Es nutzt
TCP/IP
. Sie bekommen das Gefühl über Wartezeiten durch Schießen und beobachten-Benachrichtigungen in"Battle log"
.Ich bin bisher ziemlich zufrieden. In städtischen Gebieten mit guter GSM-Abdeckung, round-trip -
dauert in der Regel weniger als 200 ms.
Manchmal könnte es sein
2 sec
. Aber in 99% ist es weniger als500 ms
.