Irgendeine Möglichkeit zu überprüfen, ob jemand seinen Browser mit Javascript / PHP geschlossen hat? [geschlossen]

8

Ich arbeite an einem PHP / MySQL / Javascript basierten Online Schachspiel. Ein Problem, auf das ich gestoßen bin, ist die Möglichkeit, dass ein Benutzer an einem Ende nur seinen Browser schließt. Gibt es eine Möglichkeit, zuverlässig festzustellen, ob jemand die Seite nicht genutzt hat / geschlossen hat?

Als zusätzliche Komplikation unterstützt unser Schulserver keine Cron-Jobs -_-

    
user1880610 08.12.2012, 08:48
quelle

3 Antworten

2

Der einzige zuverlässige Weg, dies zu tun, ist eine Ping-Technik zu Ihrem Server, wie die anderen Kommentatoren vorgeschlagen haben. Auf diese Weise steuern Sie das Spiel, nicht die Browser. Die Art und Weise, wie Sie Benutzer "verfolgen" müssen, besteht darin, einen AJAX-Anruf auszulösen ... Ich denke, alle 5 Sekunden reichen oft ... zum Server. Alles, was Sie tun werden, ist entweder etwas in eine "Tracking" -Tabelle einzufügen oder eine neue Spalte in Ihrer "Games" -Tabelle zu aktualisieren, um den letzten Server-Aktivitäten des Benutzers nachzuverfolgen (Ignorieren normaler Bewegungen im Spiel) kann denselben Prozess für normale Bewegungen ausführen und das Ping-Intervall ebenfalls zurücksetzen, um eine übermäßige Überprüfung zu vermeiden. Jedes Mal, wenn ein Benutzer einen Zug macht (oder etwas anderes, das eine Serverinteraktion erfordert), müssten Sie den Zeitpunkt der letzten Serveraktivität des Gegners überprüfen - wenn der Gegner innerhalb von 7 Sekunden nach dem Zug keinen Zug gemacht hat aktuelle Zeit, dann hat der Browser des Gegners aufgehört zu kommunizieren (aus welchem ​​Grund auch immer). Der Grund, warum ich 7 Sekunden sage, liegt an der zusätzlichen Verarbeitung, die für die Server / Datenbank-Kommunikation und für jede mögliche Netzwerkverzögerung stattfindet. Da Netzwerk-Engpass wahrscheinlich der Flaschenhals ist, sollten Sie diesen Wert auf etwa 10 erhöhen.

    
Ian 08.12.2012 09:26
quelle
1

Sie können nicht genau wissen, ob der Client geschlossen ist. Sie können einige qualifizierte Vermutungen machen, aber es wird nie zuverlässig sein.

Vielleicht könnten Sie einen Bereich finden, in dem Sie zufrieden sind, wenn Sie wissen, ob eine Client-Sitzung aktiv ist oder nicht?

Eine Low-Tech-Lösung wäre, die Sitzungs-ID (oder eine selbstgemachte eindeutige Identifizierungszeichenfolge) zusammen mit einem Zeitstempel zu speichern. Immer wenn der Client eine neue Anfrage (neue Seite laden und / oder mit AJAX) erstellt, aktualisieren Sie den Zeitstempel.

Da Sie keinen Zugriff auf Cronjobs haben, müssen Sie einen weiteren Kompromiss eingehen - lassen Sie die anderen Besucher sagen, ob der Client noch aktiv ist. Wenn ein Besucher eine Seite lädt, durchlaufen Sie die Tabelle, in der die Sitzungs-IDs und Zeitstempel gespeichert sind, und sehen Sie nach, ob Sitzungen älter als das sind, was Sie als aktiv ansehen würden.

Es ist kein Problem für Ihr genaues Problem (da es nicht möglich ist), sondern ein Low-Tech-Kompromiss.

    
Repox 08.12.2012 09:29
quelle
0

Sie können einfach ein 'RECURSIVE' AJAX-Skript auf dieser Seite festlegen, und dieses Skript sendet die aktualisierte Zeit nach kurzer Zeit automatisch an den Server. Und auf dem Server müssen Sie dieses Request Listener Script schreiben, um diese Details zu protokollieren. Wenn Sie sehen, dass eine Benutzeranfrage abgebrochen wurde oder einige Male nicht als letztes kommt, hat er seinen Browser geschlossen.

    
Mrinmoy Ghoshal 08.12.2012 09:53
quelle

Tags und Links