Ich möchte Echtzeitspiele entwickeln, die mit dedizierten Java-Servern und iPhone-Clients sowie Java-Desktop-Clients erstellt wurden. Welche verfügbaren High-Performance-Netzwerk-Transport-Bibliotheken, die für Echtzeit-Multiplayer-Spiele-Entwicklung verwendet werden könnten, existieren für Java und iPhone (insbesondere zuverlässige UDP)?
Der allgemeine Ratschlag für die meisten Echtzeit-Action-basierten Spiele (Counter-Strike, Left4Dead, Quake III) ist die Verwendung von UDP / IP-Transportprotokoll-Nachrichten als "unzuverlässige" Pakete zugunsten der "garantierten" Zustellung von TCP ( wegen Problemen mit Resend- und Latenzproblemen, die Sie nicht leicht kontrollieren können.)
Project Darkstar ist ein Java-MMO-Server mit C ++ - Bindungen (etwas zu schwer für eine leichtgewichtige Echtzeit-Netzwerkbibliothek für generischen Multiplayer) Spiele).
Ich habe in C geschriebene Bibliotheken für zuverlässiges UDP gesehen: - Enet - zuverlässige UDP-Bibliothek - Cocoa AsyncSocket
Ich möchte Echtzeitspiele entwickeln, die mit dedizierten Java-Servern und iPhone-Clients sowie Java-Desktop-Clients erstellt wurden. Welche verfügbaren High-Performance-Netzwerk-Transport-Bibliotheken, die für Echtzeit-Multiplayer-Spiele-Entwicklung verwendet werden könnten, existieren für Java und iPhone (insbesondere zuverlässige UDP)?
Der allgemeine Ratschlag für die meisten Echtzeit-Action-basierten Spiele (Counter-Strike, Left4Dead, Quake III) ist die Verwendung von UDP / IP-Transportprotokoll-Nachrichten als "unzuverlässige" Pakete zugunsten der "garantierten" Zustellung von TCP ( wegen Problemen mit Resend- und Latenzproblemen, die Sie nicht leicht kontrollieren können.)
Project Darkstar ist ein Java-MMO-Server mit C ++ - Bindungen (etwas zu schwer für eine leichtgewichtige Echtzeit-Netzwerkbibliothek für generischen Multiplayer) Spiele).
Ich habe in C geschriebene Bibliotheken für zuverlässiges UDP gesehen: - Enet - zuverlässige UDP-Bibliothek - Cocoa AsyncSocket
"besonders zuverlässiges UDP"
UDP ist nicht zuverlässig durch sein Design. Es ist wie das Senden alter (nicht elektronischer) Post. Du legst deinen Brief in den Umschlag, schreibst die Adresse, platzierst den Stempel und legst ihn auf den Briefkasten. Es könnte übertragen werden, aber Sie können nicht sicher sein. UDP ist für Situationen konzipiert, in denen Geschwindigkeit wichtiger ist als Korrektheit (Korrektheit wie in "Meine App benötigt alles, um Bits für Bits korrekt zu übertragen)."
Zum Beispiel benötigen Anwendungen wie Skype Videochat mehr Bandbreite und weniger Latenz, einige verlorene Bits können auf der Anwendungsebene repariert werden (so verwendet es UDP). In der Zwischenzeit benötigt textbasierter Chat weniger Bandbreite und überlebt viel größere Latenzen, benötigt aber mehr Korrektheit (woher weißt du diese Zeichenfolge: fsdfdsfsd wird korrekt übertragen? In welcher Sprache? Etc), also braucht es TCP. Und genau so funktioniert das in Skype.
Da du UDP erwähnt hast. Hier ist eine Java-Spiele-Server -Bibliothek (ähem ... von mir geschrieben!), Die sowohl UDP- als auch TCP-Unterstützung bietet . Zuverlässiges UDP stellt sich als TCP heraus. Sie können Ihre eigene benutzerdefinierte Ack-Logik auf UDP schreiben, aber im Allgemeinen ist es besser, mit TCP für Dinge zu gehen, die Server und UDP für alles andere erreichen müssen.
Im Jetserver verwendet dieselbe Sitzung sowohl UDP als auch TCP für die Kommunikation. Netzwerknachrichten können mit Liefergarantie , Zuverlässig = TCP und FAST = UDP.
Sehen Sie sich Kryo und die zugehörige Kommunikationsbibliothek KryoNet an.
Es wurde für genau diese Art von Anwendung entwickelt (Hochleistungs-Netzwerktransport). Ich bin mir nicht sicher, ob es noch eine Objective-C-Bindung gibt, aber selbst wenn es keine gibt, ist es einen Blick wert, nur um zu sehen, wie gut das Framework entworfen ist.
Da du UDP erwähnt hast. Hier ist eine Java-Spiele-Server -Bibliothek (ähem ... von mir geschrieben!), Die sowohl UDP- als auch TCP-Unterstützung bietet . Zuverlässiges UDP stellt sich als TCP heraus. Sie können Ihre eigene benutzerdefinierte Ack-Logik auf UDP schreiben, aber im Allgemeinen ist es besser, mit TCP für Dinge zu gehen, die Server und UDP für alles andere erreichen müssen.
Im Jetserver verwendet dieselbe Sitzung sowohl UDP als auch TCP für die Kommunikation. Netzwerknachrichten können mit Liefergarantie , Zuverlässig = TCP und FAST = UDP.
"besonders zuverlässiges UDP"
UDP ist nicht zuverlässig durch sein Design. Es ist wie das Senden alter (nicht elektronischer) Post. Du legst deinen Brief in den Umschlag, schreibst die Adresse, platzierst den Stempel und legst ihn auf den Briefkasten. Es könnte übertragen werden, aber Sie können nicht sicher sein. UDP ist für Situationen konzipiert, in denen Geschwindigkeit wichtiger ist als Korrektheit (Korrektheit wie in "Meine App benötigt alles, um Bits für Bits korrekt zu übertragen)."
Zum Beispiel benötigen Anwendungen wie Skype Videochat mehr Bandbreite und weniger Latenz, einige verlorene Bits können auf der Anwendungsebene repariert werden (so verwendet es UDP). In der Zwischenzeit benötigt textbasierter Chat weniger Bandbreite und überlebt viel größere Latenzen, benötigt aber mehr Korrektheit (woher weißt du diese Zeichenfolge: fsdfdsfsd wird korrekt übertragen? In welcher Sprache? Etc), also braucht es TCP. Und genau so funktioniert das in Skype.
Tags und Links real-time network-programming udp