2012-10-04 6 views
8

Estoy utilizando SignalR (0.5.3) Hubs para una aplicación de chat donde cada pulsación de tecla se envía al servidor (guardado en el DB), retransmitido a todos los clientes y un valor devuelto (a tipo de token de cadena) se envía desde el servidor.Manejo de la conexión SignalR en el grupo de aplicaciones recicle

Funciona bien, hasta que el grupo de aplicaciones se recicla, deja de transmitir las teclas a todos los clientes (porque el estado del servidor en memoria se pierde, supongo) y el servidor tampoco devuelve ningún valor. En este punto, supongo que todas las solicitudes a través de SignalR son puestas en cola por IIS y luego procesadas una vez que el grupo de aplicaciones ha sido reciclado.

Mi pregunta es cómo puedo manejar este escenario para que todos los clientes conozcan la disponibilidad/demora del servidor debido al reciclaje del grupo de aplicaciones, notificar al usuario que espere un momento y luego reanudar la operación al reconectarse?

Respuesta

4

Hay dos opciones.

Para 0.5.3 puede detectar cuando el cliente entra en "reconexión" o se "desconecta" y notifica al usuario que hay problemas con el servidor. Tenga en cuenta que, en la mayoría de las situaciones, el cliente no sabrá que está desconectado si el servidor simplemente desaparece.

O

Si espera para la próxima versión (1.0alpha) nos ocuparemos de la mayor parte de esto para usted. En ausencia de un servidor activaremos un evento onConnectionSlow que provocará que el cliente cambie al estado de "reconexión" (si no recibe ninguna información) hasta que el servidor vuelva a estar en línea. El cliente también sabrá si el servidor se va (estamos agregando esta funcionalidad) para casos extremos, como el reciclaje de un grupo de aplicaciones.

Espero que esto ayude!

+0

Opciones 1: Tiene razón, el cliente solo conoce la desconexión después de un retraso prolongado (tiempo de espera), por lo que el manejo a través de los eventos de reconexión/desconexión puede no funcionar, pero aún así le daré una oportunidad. – Nick

+0

@Taylor Mullen - Hola, estoy en lo correcto al pensar que esto significa que a partir de 0.5.3 si el servidor de señalización desaparece, el cliente puede quedarse atascado intentando volver a conectarse hasta que se agote el tiempo de espera, y no hay eventos en el lado del cliente que puedan ser utilizado para detectar esto en este momento? Cheers Will – Will

+0

@Will que es parcialmente correcto. En 0.5.3 NO recibirá ningún evento específico, como "nowReconnecting", pero puede detectar que SignalR está intentando volver a conectarse a través del evento stateChanged. Cuando entramos en el estado de reconexión, el evento stateChanged se activará y el nuevo estado de conexión se volverá a conectar. Además, no hay tiempo de espera en el cliente, intentará reconectarse para siempre. –

Cuestiones relacionadas