gpt4 book ai didi

signalr - 给定 SignalR ConnectionId,我能否判断该 session 是否仍处于连接状态?

转载 作者:行者123 更新时间:2023-12-04 12:42:00 25 4
gpt4 key购买 nike

出于各种原因,在建立 SignalR 连接时,我将该 ConnectionId 存储在我的数据存储中。但是,这些连接记录可能会变得孤立,例如,如果 SignalR 重新启动。 (我还观察到让我怀疑 OnDisconnected() 是否被正确调用的行为,尽管我不太确定这一点。)

但是无论出于何种原因,我都会定期在我的数据库中得到孤立的记录,我希望能够修剪这些记录,并删除列出的任何实际上不再连接的 ConnectionID - 大概是通过让 SignalR 告诉我此 ConnectionID 仍与实时 session 相关联。

我查看了 SignalR 源代码,并没有向我指出如何最好地完成此操作。有没有合理的方法来做到这一点?

最佳答案

实现这一目标的方法是自行跟踪客户。从您的帖子看来,您似乎已经这样做了(如果您没有这样做,仍会提供代码),但这是了解客户端是否已连接的唯一方法。 SignalR 服务器触发 onconnected/ondisconnected 事件,以指示客户端是否已连接。

我建议确保在重新连接时不要重新实例化数据库中的记录。

例如( super 简单的例子):

class myHub
{
private static List<String> _connectedClients = new List<String>();

public override Task OnConnected()
{
_connectedClients.Add(Context.ConnectionId);
return base.OnConnected();
}

public override Task OnDisconnected()
{
_connectedClients.Remove(Context.ConnectionId);
return base.OnDisconnected();
}

public static bool IsConnected(string cid)
{
return _connectedClients.Contains(cid);
}
}

您现在可以在集线器上调用 IsConnected 以确定当前是否连接了连接 ID。

关于signalr - 给定 SignalR ConnectionId,我能否判断该 session 是否仍处于连接状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14131789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com