2009-08-22 13 views
1

Ich entwickle eine Relais-Chat-Anwendung, in zwei Bereiche unterteilt.Wie benachrichtigen Sie den Webserver, wenn der Benutzer den Browser schließt (in asp.net)?

rechten Bereich -> Die Chat-Antworten von Benutzern (diese verwendet eine ASP.NET mehrzeilige Kontrollschild im Inneren des Update-Panel platziert, so dass, wenn alle die Antworten Benutzertypen und übermittelt sie an dieser Steuerung hinzugefügt wird)

links Bereiche -> die Liste der Benutzer, die gerade online sind (dies verwendet das ASP.NET-Listensteuerelement, das ebenfalls im Aktualisierungsbereich platziert wird).

darunter ist das Textfeld für den Benutzer Text eingeben und eine Schaltfläche senden, um seine Antwort zu senden.

alles funktioniert gut. Wenn der Benutzer jedoch das Browserfenster schließt und nicht auf die Schaltfläche zum Abmelden klickt. Die Liste im linken Bereich wird nicht aktualisiert.

Es passiert richtig, wenn der Benutzer abmeldet.

Gibt es eine Möglichkeit, den Benutzernamen aus der Liste zu klopfen, wenn der Benutzer den Browser schließt (noch bevor seine Sitzung auf der Serverseite abgelaufen ist)?

Sorry ich konnte den Screenshot nicht freilegen.

kann jemand eine Idee zusammen mit einem Beispiel Code-Snippet vorschlagen?

dank

vijay

Antwort

2

Sie können use Javascript to detect when the browser has been closed und dann anmelde einen AJAX-Request an den Server zurück Kick-off, dass der Benutzer überlassen.

+0

@bcwood. Es wird ausgelöst, wenn ein Benutzer auf eine andere Seite wechselt. Ich glaube nicht, dass sie in der Lage sein werden, zuverlässig zu erkennen, dass der Benutzer den Browser aus dem Lesen dieses Forums schließt. Habe ich etwas verpasst? – klabranche

+0

@klabranche aber wenn sie von der aktuellen Seite weg navigieren, haben sie die Chat-Anwendung verlassen, was genauso gut sein könnte wie das Schließen ihres Browsers. –

3

Sie können es andersherum tun: Ping den Server vom Browser mit einem Ajax-Aufruf in regelmäßigen Abständen. Wenn kein Ping empfangen wurde, entfernen Sie den Benutzer.

+1

Ich habe das versucht. scheint, wir pollen und das trinkt die Effizienz. – vijaysylvester

+1

Ich denke, das ist der einzige zuverlässige Weg. Sie können es effizienter machen, wenn Sie nur pingen, wenn der Benutzer für eine bestimmte Zeit keine Nachrichten gesendet hat. Auch für Benutzer im Leerlauf können Sie das Timeout-Intervall nach jedem Ping dynamisch erhöhen. – Zed

Verwandte Themen