2010-07-01 16 views
6

Java-Server-Technologien lernen, versuchen, einige Dinge zu klären. Es gibt wenige Technologien, mit denen Java-Anwendungen miteinander kommunizieren können.Wie kann der Server Daten an den Client senden?

1) Web Services (REST/SOAP) über http

2) Einfache POST/GET URLConnection über http.

3) Sockel

4) RMI = Sockets + Serialisierungsobjekt + Einige Dienstprogramme

5) Verschiedene Medienserver wie red5 = rtmp oder RTMPT

All diese Technologien annehmen, dass es ein Server Anwendung und Client-Anwendung. Die Client-Anwendung kennt die Serveradresse und sollte Initiator des Anrufs sein. Und soweit ich weiß, gibt es heutzutage Server, die Daten an den Client senden können. Er kann Daten nur als Antwort an den Client zurücksenden. Und es ist möglich, wenn sie nur ihre Rollen ändern, in diesem Fall Server sollte Client-IP kennen.

Also frage ich mich, wie Netzwerkspiele funktionieren? Ist es möglich, die Verbindung zu öffnen und Daten zwischen Server und Client für alle Zeit auszutauschen, ohne die Anfrage vom Client alle 1-2 Sekunden zu ziehen und der Server würde die IP des Clients nicht kennen. Ich spreche nicht über Kometen und andere Hacks.

Danke

Antwort

6

Die meisten Zwei-Wege-, persistent Anwendungen, die einen Netzwerk-Port öffnen und offen halten. Der Server überwacht einen bekannten Port, und wenn ein Client eine Verbindung zu diesem Port herstellt, erhält er eine dauerhafte TCP-Verbindung zum Server. Eine solche Verbindung ist im Grunde eine bidirektionale "Pipe", Daten können seriell in beide Richtungen gleichzeitig fließen. Solange diese Pipe offen ist, wartet der Server auf Nachrichten vom Client und der Client wartet auf Nachrichten vom Server. Die gemeinsamen E/A-APIs, die für TCP-Pipes verwendet werden, ermöglichen das "Aufwachen" jedes Verbindungsendes: Eine asynchrone E/A-Anforderung führt eine registrierte Rückruffunktion aus einem Thread aus, der von der BS- oder E/A-Bibliothek verwaltet wird oder der Client/Server bindet bei einem "blockierenden" Aufruf seinen eigenen Thread ein, der zurückkehrt, wenn Daten verfügbar sind. Bei diesem Modell sind keine Abfragen oder Neuverbindungsversuche erforderlich, der Client und der Server "wissen", wann Daten verfügbar sind, und können sofort darauf reagieren.

+2

Auch Echtzeit-Netzwerkspiele "cheaten" oft ein bisschen. Jeder Client aktualisiert die Welt lokal in Echtzeit und macht einen Trick, die freigegebene Simulation erneut zu synchronisieren, wenn ein neues Update vom Server eintrifft. Wenn du auf deinen Feind schießt, wird er vielleicht deinem Schuss ausweichen und nur einen kleinen Schaden haben oder nicht. Natürlich wird der Server entscheiden, ob der Ausweichen-Befehl von diesem Client vor oder nach dem Schuss ankommt ... aber der angreifende Spieler wird wahrscheinlich keine eventuelle Inkongruenz zwischen der gezeigten 3D-Animation und der Anzahl an Energie bemerken Balken subtrahiert. – 6502

Verwandte Themen