Ich habe einen AJAX-Client, der Nachrichten vom Server empfangen muss. Einige Nachrichten vom Server ähneln nicht dem Anfrage-Antwort-Typ. Zum Beispiel, Imaging-Spiel, in dem Spieler eintreten können. Der Server muss an die Client-Informationen über den Spieler senden. Aber wie kann der Server eine Nachricht per HTTP an den Client senden, ohne dass eine Anfrage vom Client kommt? Nur Entscheidung, die ich erfinden kann: Client senden Anfrage an Server (getNewPlayerEnter Anfrage) mit großen Timeout, überprüft Server Status des Spielers, wenn im Set neue Spieler sind, dann Server Informationen an Client senden, wenn nicht Server 'schläft' auf einige Zeit, und nach dem "Schlafen" Server überprüft Spieler wieder gesetzt. Ich denke meine Entscheidung ein wenig dumm (vielleicht nicht wenig). Wie implementieren Sie es richtig?
p.s. Entschuldigung für meine EnglischWie Sie Dual-Kommunikation zwischen Server und Client über http implementieren
Antwort
Worauf Sie sich beziehen, ist "polling", wo Ihr clientseitiger Code alle x Sekunden eine Anfrage an den Server sendet, um nach Updates zu suchen.
Es ist eine einfach zu implementierende Lösung, weshalb Sie es so oft sehen. Eine bessere Lösung ist jedoch die Verwendung von Comet.
Im Jahr 2006 prägte Alex Russell den Begriff "Comet", um eine Technik zu identifizieren, bei der der Client eine HTTP-Anfrage an den Server stellt und der Server diese Verbindung unbegrenzt offen hält. Mit dieser offenen Verbindung kann der Server bei Aktualisierungen Updates an den Client in der Antwort senden.
Wenn die Antwort empfangen wird, öffnet der Client sofort eine neue langlebige HTTP-Verbindung.
Ich ermutige Sie, eine Suche nach "Comet" und welcher server-seitigen Sprache, die Sie verwenden, um ein Framework zu finden, mit dem Sie beginnen.
Comet Daily hat einige wirklich großartige Demos, von Chat-Anwendungen bis zu Spielen, die Comet benutzen. Wenn Sie ein Tool wie Firebug oder Chrome Debugger haben, können Sie den Antwort/Anfrage-Zyklus dieser Echtzeitanwendungen beobachten.
Die Art, wie dies in der Regel getan wird, ist für den Client, den Server in regelmäßigen Abständen (etwa alle 10 Sekunden) zu pingen. Wenn auf dem Server eine Änderung stattgefunden hat, wird die Änderung zurück an den Client gesendet. Wenn keine Änderung erfolgt ist, wird entweder eine leere Antwort gesendet oder eine Art von "Nicht-Änderung" -Code, den Sie angeben.
Ich dachte darüber nach, aber ich denke, diese Implementierung Server geladen werden können, wenn wir viele Clients, die Ping-Server haben. Weil ich dachte, dass eine Anfrage mit großem Timeout besser ist als viele Anfragen. Oder liege ich falsch? –
@Alex - Wenn Sie ständig Ihren Server von N Clients anpingen, wird es eine Menge Bandbreite sowie viele Threads auf Ihrem Server verwenden. Je kleiner das Timeout ist, desto mehr Last auf dem Server. Je größer die Zeitüberschreitung, desto weniger Last auf Ihrem Server, aber desto weniger Echtzeit wird Ihre App sein. Wenn Sie eine Echtzeit-App wünschen, müssen Sie in der Lage sein, Updates sofort zu pushen. – jmort253
Danke. Ich habe diese Methode unter dem Namen "connection parking" gesucht ... –
Das ist wirklich nützlich. Vielen Dank. – CodeBlue