2009-02-10 4 views
7

Antecedentes: Estoy creando una página ASP.NET de tipo sala de chat muy simple con C# Code-Behind. Los usuarios actuales/mensajes de chat se muestran en Controles ubicados dentro de un Panel de actualización de AJAX, y usando un temporizador: extraen información de un DB cada pocos segundos.Ejecutando la función del lado del servidor cuando el navegador se cierra

estoy tratando de encontrar una manera sencilla de manejar el estado de configuración de uso para "fuera de línea" al salir de su navegador en lugar de golpear el botón "Cerrar sesión". El estado "Sin conexión" actualmente es solo 1 char (y/n) para IsOnline.

Hasta ahora he examinado la ventana. Antes de descargar con Javascript, estableciendo una variable de forma oculta con una función en este evento -> Por supuesto, el problema es que todavía tendría que probar esta variable de forma oculta en mi Código- Detrás de un lugar para hacer la última consulta de base de datos del lado del servidor, estableciendo efectivamente el usuario fuera de línea.

me puede obfusticating por completo este sencillo problema de probabilidades! y por supuesto agradecería cualquier sugerencia alternativa completamente diferente.

Gracias

Respuesta

15

que sospecha que está ladrando al árbol equivocado. Recuerde que es posible que el usuario pierda repentinamente su conexión a Internet, que su navegador se bloquee o que apague su computadora con el gran interruptor rojo. Habrá casos en los que el servidor simplemente nunca escuche del navegador nuevamente.

La mejor manera de hacerlo es con un "hombre muerto". Como dijo que están extrayendo información de la base de datos cada pocos segundos, aproveche esa oportunidad para almacenar (en la base de datos) una marca de tiempo por última vez que escuchó de un cliente determinado.

Cada minuto más o menos, en el servidor, realice una consulta para encontrar clientes que no han sondeados durante un par de minutos, y establecer la conexión del usuario ... todo en el servidor.

+0

Gracias Joel, tu sugerencia tiene mucho sentido. ¿Tiene alguna sugerencia de un buen punto de partida para implementar esa encuesta en el servidor para verificar/configurar usuarios fuera de línea? Nunca he hecho algo así, a pesar de lo simple que suena. –

+0

probablemente valga otra pregunta ... "cómo ejecutar procesos periódicos en el servidor asp.net" ... –

+0

¡Gracias! Lo escribiré pronto, entonces - Aprecio. –

2

Javascript no puede ser fiable, porque puedo cerrar mi navegador por finalizar de modo que.

Un método más fiable podría ser enviar mensajes periódicos "Hola todavía estoy vivo" desde el navegador al servidor, y tener el servidor de cambiar el estado cuando se deja de recibir estos mensajes.

2

Solo puedo estar de acuerdo con Joel aquí. No es ninguna forma confiable para saber cuándo el agente HTTP desea finalizar la conversación.

Cuestiones relacionadas