2009-02-10 13 views
7

Background: sto creando una pagina ASP.NET molto simile a una chatroom con C# Code-Behind. Gli attuali utenti/messaggi di chat sono visualizzati in Controlli situati all'interno di un pannello di aggiornamento AJAX e utilizzando un timer - estraggono le informazioni da un DB ogni pochi secondi.Esecuzione della funzione lato server durante la chiusura del browser

Sto cercando di trovare un modo semplice per gestire l'impostazione dello stato di un utente su "Offline" quando escono dal browser anziché premere il pulsante "Disconnessione". Lo stato "Offline" è attualmente solo a 1 carattere (y/n) per IsOnline.

Finora ho cercato in window.onbeforeunload con Javascript, impostando una variabile di modulo nascosta con una funzione su questo evento -> Naturalmente il problema è che dovrei ancora testare questa variabile di modulo nascosta nel mio Codice- Dietro da qualche parte per fare la query del DB lato server finale, in modo efficace l'utente non in linea.

Potrei essere completamente in disaccordo con questo probabile problema! e naturalmente apprezzerei qualsiasi suggerimento alternativo completamente diverso.

Grazie

risposta

15

ho il sospetto che si sta abbaiare contro l'albero sbagliato. Ricorda, è possibile che l'utente perda improvvisamente la connessione Internet, il browser si blocca o spegne il computer utilizzando il grande interruttore rosso. Ci saranno casi in cui il server semplicemente non ascolterà più dal browser.

Il modo migliore per farlo è con un "uomo morto". Dal momento che hai detto che stanno tirando le informazioni dal database ogni pochi secondi, usa questa opportunità per memorizzare (nel database) un timestamp per l'ultima volta che hai sentito da un determinato cliente.

Ogni minuto circa, sul server, eseguire una query per trovare i client che non hanno eseguito il polling per un paio di minuti e impostare l'utente offline ... tutto sul server.

+0

Grazie Joel, il tuo suggerimento ha molto senso. Ti piacerebbe avere un suggerimento per un buon punto di partenza per implementare quel sondaggio On-Server per controllare/impostare gli utenti Offline - Non ho mai fatto qualcosa del genere, nonostante la semplicità che suona. –

+0

probabilmente vale un'altra domanda ... "come eseguire processi periodici sul server asp.net" ... –

+0

Grazie! Ne scriverò uno subito dopo - Apprezzalo. –

2

Javascript non può essere affidabile, perché posso chiudere il browser interrompendolo.

Un metodo più affidabile potrebbe essere quello di inviare periodicamente messaggi "ciao sono ancora vivo" dal browser al server e fare in modo che il server cambi lo stato quando smette di ricevere questi messaggi.

2

Posso solo essere d'accordo con Joel qui. Lì non è un modo affidabile per sapere quando l'agente HTTP vuole terminare la conversazione.

Problemi correlati