websocket 检测断开用户信号

vd2z7a6w  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(166)

我需要检测用户何时使用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");
});

但我如何检测断开连接?

daolsyd0

daolsyd01#

将此覆盖方法添加到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();
}

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

pkwftd7m

pkwftd7m2#

在AspNetCore.信号R中

public override async Task OnDisconnectedAsync(Exception? exception)
        {
            Trace.WriteLine(Context.ConnectionId + ' - disconnected');
            await base.OnDisconnectedAsync(exception);
        }

相关问题