2012-03-20 18 views
5

In che modo il SignalR gestisce la disconnessione del client? Ho ragione se dichiaro quanto segue?SignalR: disconnessione client

  • SignalR rileva la chiusura/aggiornamento della pagina del browser tramite la gestione degli eventi Javascript e invierà il pacchetto appropriato al server (tramite la connessione permanente);
  • SignalR NON rileva la chiusura del browser/errore di rete (probabilmente solo per timeout).

Il mio obiettivo è il trasporto a lunga polling.

Sono a conoscenza di this question ma vorrei renderlo un po 'chiaro per me.

risposta

9

Se un utente aggiorna la pagina, viene considerata una nuova connessione. Hai ragione sul fatto che la disconnessione è basata su un timeout.

È possibile gestire gli eventi Connetti/Riconnetti e Disconnetti in un hub implementando SignalR.Hubs.IConnected e SignalR.Hubs.IDisconnect.

Quanto sopra riferito a SignalR 0.5.x.

Da the official documentation (attualmente per 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

In SignalR 1.0, il SignalR.Hubs.IConnected e SignalR.Hubs.IDisconnect non sono più implementati, e ora è solo un override sul hub stesso:

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(); 
    } 
} 
Problemi correlati