SignalR: отключение клиента - PullRequest
5 голосов
/ 20 марта 2012

Как SignalR обрабатывает отключение клиента? Прав ли я, если укажу следующее?

  • SignalR обнаружит закрытие / обновление страницы браузера с помощью обработки событий Javascript и отправит соответствующий пакет на сервер (через постоянное соединение);
  • SignalR НЕ будет обнаруживать закрытие браузера / сбой сети (возможно, только по таймауту).

Я стремлюсь к длинному опросу транспорта.

Я знаю этот вопрос , но хотел бы прояснить его для меня.

Ответы [ 2 ]

9 голосов
/ 22 марта 2012

Если пользователь обновляет страницу, это рассматривается как новое соединение.Вы правы, что отключение основано на тайм-ауте.

Вы можете обрабатывать события Connect / Reconnect и Disconnect в концентраторе, реализуя SignalR.Hubs.IConnected и SignalR.Hubs.IDisconnect.

Выше упоминалось о SignalR 0.5.x.

Из официальной документации (в настоящее время для 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 голосов
/ 21 февраля 2013

В SignalR 1.0, SignalR.Hubs.IConnected и SignalR.Hubs.IDisconnect больше не реализованы, и теперь это просто переопределение на самом концентраторе:

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