检测断开用户信号器

frc*_*frc 6 c# asp.net-mvc websocket signalr

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

我有这两种集线器方法:

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

public void Goodbye(string message)
{
    Trace.WriteLine(message + " - " + Context.ConnectionId);
}
Run Code Online (Sandbox Code Playgroud)

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

$.connection.hub
            .start()
            .done(function () {
                hub.server.say("Hello SignalR");
});
Run Code Online (Sandbox Code Playgroud)

但是我如何检测断开连接?

Jar*_*lec 4

将此重写方法添加到您的Hub类中:

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

这将在服务器端处理和记录断开连接,而我认为在服务器端跟踪它没有多大意义,client因为您的 SignalR 会话不太可能从服务器端终止 -请参阅此处

编辑评论@stuartd:您也可以覆盖

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

因此,您将能够跟踪客户端尝试重新连接到服务器并成功的情况。

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

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

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

  • 在 `AspNetCore.SignalR` 中,我需要 `public override Task OnDisconnectedAsync(Exception? e)`。 (2认同)