2012-03-20 44 views
5

¿Cómo maneja SignalR la desconexión del cliente? ¿Estoy en lo cierto si declaro lo siguiente?SignalR: desconexión del cliente

  • SignalR detectará la página del navegador cerrar/actualizar mediante JavaScript si se trata de eventos y enviará el paquete adecuado al servidor (a través de la conexión persistente);
  • SignalR NO detectará el cierre del navegador/falla de la red (probablemente solo por tiempo de espera).

Mi objetivo es el transporte de larga duración.

Conozco this question pero me gustaría dejarlo un poco claro para mí.

Respuesta

9

Si un usuario actualiza la página, se trata como una nueva conexión. Tiene razón en que la desconexión se basa en un tiempo de espera.

Puede controlar los eventos Conectar/Volver a conectar y Desconectar en un concentrador implementando SignalR.Hubs.IConnected y SignalR.Hubs.IDisconnect.

Lo anterior se refiere a SignalR 0.5.x.

De the official documentation (actualmente para v1.1.3):

public class ContosoChatHub : Hub 
{ 
    public override Task OnConnected() 
    { 
     // Add your own code here. 
     // For example: in a chat application, record the association between 
     // the current connection ID and user name, and mark the user as online. 
     // After the code in this method completes, the client is informed that 
     // the connection is established; for example, in a JavaScript client, 
     // the start().done callback is executed. 
     return base.OnConnected(); 
    } 

    public override Task OnDisconnected() 
    { 
     // Add your own code here. 
     // For example: in a chat application, mark the user as offline, 
     // delete the association between the current connection id and user name. 
     return base.OnDisconnected(); 
    } 

    public override Task OnReconnected() 
    { 
     // Add your own code here. 
     // For example: in a chat application, you might have marked the 
     // user as offline after a period of inactivity; in that case 
     // mark the user as online again. 
     return base.OnReconnected(); 
    } 
} 
6

En SignalR 1.0, el SignalR.Hubs.IConnected y SignalR.Hubs.IDisconnect ya no están implementadas, y ahora es sólo una anulación de la concentrador en sí:

public class Chat : Hub 
{ 
    public override Task OnConnected() 
    { 
     return base.OnConnected(); 
    } 

    public override Task OnDisconnected() 
    { 
     return base.OnDisconnected(); 
    } 

    public override Task OnReconnected() 
    { 
     return base.OnReconnected(); 
    } 
} 
Cuestiones relacionadas