Gibt es eine Alternative von Ajax, die Abfrage nicht ohne Modifikationen Server-Seite erfordern?

StackOverflow https://stackoverflow.com/questions/427861

  •  06-07-2019
  •  | 
  •  

Frage

Ich versuche, ein klein und einfach „Ajax“ Multiplayer-Spiel zu schaffen. Koordinaten von Objekten werden durch einen PHP „Handler“ gegeben. Diese handler.php Datei wird alle 200ms abgefragt wird, von Ajax.

Da es keine Notwendigkeit, abzufragen, wenn nichts passiert, frage ich mich, ist es etwas, das die gleiche Sache ohne häufiges Polling tun könnte? Z.B. Komet, obwohl ich hörte, dass Sie benötigen serverseitige Anwendungen für Comet konfigurieren. Es ist ein gemeinsamer Web-Server, so kann ich das nicht tun.

Vielleicht die handler.php Datei verhindern, dass sogar die Rückkehr eine Antwort, wenn nichts auf dem Client geändert werden muss, ist das möglich? Dann wieder würden Sie immer noch den Client unnütz auf eine Antwort zu fragen, auch wenn etwas noch nicht geändert hat. Grundsätzlich sollte es nur die Nutzung der Bandbreite und Ressourcen durchtrennt, wenn etwas an den Client erzählt werden muss, zum Beispiel. die Änderung einer Objektkoordinaten.

War es hilfreich?

Lösung

Hier ist eine Lösung - verwenden, um eine SaaS-Komet-Provider, wie WebSync On-Demand . Keine Server-Ressourcen zu befürchten, geteilt oder nicht-Hosting, da sie alle ausgelagert sind, und Sie können die Informationen schieben je nach Bedarf.

Da es SaaS, wird es mit einer beliebigen Server Sprache arbeiten. Für PHP, gibt es bereits einen Verleger geschrieben und bereit zu gehen.

Andere Tipps

Comet ist in der Regel für diese Art der Sache verwendet, und es kann eine zerbrechliche Einrichtung sein, da es nicht eine besonders verbreitete Technologie ist, so dass es leicht sein, kann nicht auf „es richtig machen.“ Das heißt, es sind mehr Ressourcen zur Verfügung jetzt, als wenn ich versuchte es zuletzt ~ 2 Jahren.

Ich glaube nicht, können Sie tun, was Sie denken und haben handler.php einfach nichts zurück und die Ausführung zu stoppen: Der Web-Server hält die Verbindung offen und verhindern eine weitere Abfrage, bis handler.php etwas tut (endet oder liefert Ausgang). Wenn ja, sind Sie immer noch eine Antwort Handhabung.

Sie können eine lange Abfragetechnik versuchen, wo Sie Ihr AJAX eine sehr große Timeout erlaubt (zum Beispiel 30 Sekunden), und handler.php dreht, ohne zu antworten, bis es etwas zu berichten hat, kehrt dann zurück. (Sie werden die Spinn sicherstellen möchten, ist nicht ressourcenintensiv-). Wenn handler.php „abgelaufen“ und nichts passiert, haben sie verlassen und wieder AJAX Umfrage lassen. Da es nur alle 30 Sekunden geschieht, wird es eine große Verbesserung gegenüber ~ 5-mal pro Sekunde. Das würde Ihre Abfrage auf ein Minimum halten.

Aber das ist die Art der Sache Comet konzipiert ist.

Wie Ajax Sie bietet eine Client-Server-Anfrage-Modell (normalerweise bezeichnet Pull statt Push), die einzige Möglichkeit, Daten zu erhalten, vom Server über Anfragen ist. Jedoch eine übliche Technik, dies zu umgehen für den Server ist nur zu reagieren, wenn es neue Daten hat. So macht der Client eine Anforderung, hängt der Server auf diese Anforderung auf, bis etwas passiert und dann antwortet. Dies wird um die Notwendigkeit für häufige Abfrage, auch wenn die Daten nicht geändert haben, da Sie nur das Client benötigen eine neue Anforderung senden, nachdem er eine Antwort bekommt.

Da Sie PHP verwenden, eine einfache Methode könnte den PHP-Code den Schlaf haben Befehl für 200 ms zu einer Zeit zwischen den Prüfungen auf Datenänderungen ruft und dann die Daten an den Client zurück, wenn es sich ändert.

EDIT: Ich würde auch empfehlen, auf Antrag einen Timeout haben. Also, wenn nichts für etwa 2 Sekunden geschieht, eine „keine Änderung“ Nachricht zurückgesendet. Auf diese Weise der Client den Server kennt, ist noch am Leben und die Verarbeitung seiner Anfrage.

Da diese markiert ist „html5“: HTML5 hat <eventsource> und WebSocket , aber die Umsetzung Seite befindet sich noch im Futur in der Praxis.

Opera implementiert eine alte Version von <eventsource> genannt <event-source>.

Der Server muss daran teilnehmen. Prüfen Sie mit dem Hosting-Provider, welche Module zur Verfügung stehen. Oder versuchen, sie zu überzeugen, Comet zu unterstützen.

Vielleicht sollten Sie eine kleine Virtual Private Server (VPS) für diese in Betracht ziehen.

Eine Sache, auf den langen Abfrage Vorschläge zu machen: Wenn Sie auf einem gemeinsamen Server sind, dann wird diese Lösung begrenzte Skalierbarkeit, da jede aktive lange Umfrage eine Verbindung halten (und einen serverseitigen Prozess, dass die Verbindung zum Service) aktiv. Ihr Provider höchstwahrscheinlich hat Grenzen (entweder politische Erwägungen festgelegte oder de facto) auf der Anzahl der Verbindungen, die Sie zur gleichen Zeit geöffnet haben, so dass Sie eine Wand schlagen werden, wenn Sie mehr Sitzungen haben / Fenster als das Spiel gleichzeitig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top