Real-time-game-networking-Bibliotheken für Spiele in Java und Objective-C
Ich bin auf der Suche nach Aufbau-Echtzeit-Spiele integriert die Verwendung eines dedizierten Java-server-und iphone-clients als auch als Java-desktop-clients. Was high-performance-Netzwerk-transport-Bibliotheken, die verwendet werden könnte für die Echtzeit-multiplayer-Spiel, Entwicklung, existieren für Java und iphone (speziell zuverlässigen UDP)?
Der Allgemeine Rat für die meisten Echtzeit-action-basierte Spiele (Counter-Strike, Left4Dead, Quake III) ist die Verwendung von UDP/IP-transport-Protokoll das senden von Nachrichten als "unzuverlässig" - Pakete zu Gunsten der "garantierten" Lieferung von TCP (aufgrund von Problemen mit dem senden und Latenz Probleme, die Sie nicht so leicht kontrollieren).
- Half-Life Source-Engine-Networking-Übersicht
- Quake III Vernetzung
Der andere Rat ist: bauen Sie eine zuverlässige UDP-Protokoll, können Sie "Optional" garantieren die Lieferung von UDP-Paketen (zwar noch nicht in der Lage zu garantieren, die Lieferung um wie ein TCP-stream, so lange, wie Ihr Spiel verarbeiten kann out-of-order-Pakete).
Project Darkstar ist eine Java-MMO-server mit C++ - bindings (ein wenig zu schwer für ein " light-weight-real-time-networking-Bibliothek für generische multiplayer-Spiele).
Ich habe gesehen, Bibliotheken, geschrieben in C für zuverlässigen UDP:
- Enet - zuverlässige UDP-Bibliothek
- Kakao AsyncSocket
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie einen Blick auf Kryo-und seine damit verbundene Kommunikation Bibliothek KryoNet.
Es wurde entwickelt für genau diese Art von Anwendung (high performance network-transport). Ich bin mir nicht sicher, ob es ein Objective-C-Bindung, aber auch wenn es nicht es ist auch einen Blick Wert, nur um zu sehen wie gut der Rahmen ausgelegt ist.
Da Sie erwähnten UDP. Hier ist ein java-game-server Bibliothek (ähem... von mir geschrieben!) das bietet sowohl UDP-und TCP-Unterstützung. Zuverlässige UDP stellt sich heraus, dass TCP. Sie können schreiben Sie Ihre eigenen benutzerdefinierten ack Logik auf der Oberseite des UDP -, aber im Allgemeinen ist es besser zu gehen mit TCP für Dinge, die muss erreichen, server und UDP für alles andere.
In jetserver, die gleiche session verwendet sowohl UDP als auch TCP zu kommunizieren. Netzwerk-Nachrichten, die gesendet werden können mit Lieferung Garantie, Zuverlässig = TCP und SCHNELL = UDP.
", insbesondere die zuverlässige UDP"
UDP ist nicht zuverlässig durch das design. Es ist wie das versenden von alte (nicht elektronische) post. Sie legte den Brief in den Umschlag, schreibst die Adresse, den Stempel, und Sie Tropfen, der auf das Postfach. Es könnte übertragen werden, aber Sie können nicht sicher sein.
UDP ist ausgelegt für Situationen, in denen Geschwindigkeit wichtiger ist als Korrektheit (Korrektheit wie bei "die app muss alles korrekt übertragenen bits durch bits).
Beispielsweise Anwendungen wie skype videochat braucht mehr Bandbreite und weniger Latenz, etwas verloren bits werden fest auf der Anwendungs-Ebene (so es verwendet UDP). In der Zwischenzeit, text-basierte chat-braucht weniger bandhwidth und überlebt viel größere Latenzen, benötigt aber etwas mehr Korrektheit (Woher weißt du das string: fsdfdsfsd ist richtig übertragen? in welcher Sprache? etc), so muss es TCP. Und eigentlich ist das, wie funktioniert das in skype.