检测断开用户信号器

时间:2017-01-25 14:21:48

标签: c# asp.net-mvc websocket signalr

我需要检测用户何时使用signalr连接和断开连接。

我有这两种集线器方法:

public void Say(string message)
{
    Trace.WriteLine(message + " - " + Context.ConnectionId);
}

public void Goodbye(string message)
{
    Trace.WriteLine(message + " - " + Context.ConnectionId);
}

我已经实现了Say方法,它负责检测连接,如下所示:

$.connection.hub
            .start()
            .done(function () {
                hub.server.say("Hello SignalR");
});

但我如何检测断开?

1 个答案:

答案 0 :(得分:2)

将此覆盖方法添加到Hub类:

public override Task OnDisconnected(bool stopCalled)
{
    // do the logging here
    Trace.WriteLine(Context.ConnectionId + ' - disconnected');
    return base.OnDisconnected(stopCalled);
}

这将处理和记录服务器端的断开,而我认为在client方面跟踪它是没有意义的,因为它不太可能从服务器端终止SignalR会话 - see here

关于@stuartd评论的修改: 你也可以覆盖

public override Task OnReconnected()
{
    Trace.WriteLine(Context.ConnectionId + ' - reconnected');
    return base.OnReconnected();
}

这样您就可以在客户端尝试重新连接到服务器并成功时跟踪案例。

编辑#2: 那么你当然可以使用相同的机制来跟踪OnConnected事件

public override Task OnConnected()
{
    Trace.WriteLine(Context.ConnectionId + ' - reconnected');
    return base.OnConnected();
}

因此,所有跟踪代码都可以方便地保存在服务器端,这在客户端登录到集线器但由于某种原因无法执行您用于跟踪已记录状态的方法时更加强大。