Echtzeit-Netzwerkbibliotheken für Spiele in Java und Objective-C

8

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.)

  • Half-Life Source Engine-Netzwerkübersicht
  • Quake III Networking Der andere Rat ist, ein zuverlässiges UDP-Protokoll zu erstellen, mit dem Sie "optional" die Lieferung von UDP-Paketen garantieren können (während Sie nicht in der Lage sind, eine Zustellungsreihenfolge wie einen TCP-Stream zu garantieren, solange Ihr Spiel vergriffene Pakete verarbeiten kann).

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

    
Dougnukem 27.10.2009, 23:39
quelle

3 Antworten

8
___ qstntxt ___

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.)

  • Half-Life Source Engine-Netzwerkübersicht
  • Quake III Networking Der andere Rat ist, ein zuverlässiges UDP-Protokoll zu erstellen, mit dem Sie "optional" die Lieferung von UDP-Paketen garantieren können (während Sie nicht in der Lage sind, eine Zustellungsreihenfolge wie einen TCP-Stream zu garantieren, solange Ihr Spiel vergriffene Pakete verarbeiten kann).

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

    
___ answer17811203 ___

"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.

    
___ tag123networkprogramming ___ Programmierung zum Erstellen und Verwalten von Netzwerken sowie Hinzufügen von Netzwerkkonnektivität zu einem (Satz von) Programmen. ___ tag123realtime ___ Eine Aufgabe ist in Echtzeit, wenn die Fertigstellung der Aktivitäten eine funktionale Anforderung und eine Korrektheitsbedingung ist, und nicht nur eine Leistungsmetrik. Ein Echtzeitsystem ist ein System, in dem einige (wenn auch vielleicht nicht alle) Aufgaben Echtzeitaufgaben sind. BENUTZEN SIE DIESEN TAG NICHT, wenn Sie nur "real-world" meinen. ___ tag123udp ___ Das Benutzerdatagrammprotokoll ist eines der Nachrichtenprotokolle des IP-Protokollstapels. Mit UDP können Computeranwendungen Nachrichten an andere Hosts in einem Internet Protocol (IP) -Netzwerk senden, ohne dass eine vorherige Kommunikation erforderlich ist, um spezielle Übertragungskanäle oder Datenpfade einzurichten. ___ qstnhdr ___ Echtzeit-Netzwerkbibliotheken für Spiele in Java und Objective-C ___ answer10774058 ___

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.

    
___ answer3104381 ​​___

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.

    
___
mikera 23.06.2010 18:22
quelle
4

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.

    
Abe 27.05.2012 12:42
quelle
-1

"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.

    
gyorgyabraham 23.07.2013 13:11
quelle