由于各种原因,当建立SignalR连接时,我将ConnectionId存储在我的数据存储区中.但是,例如,如果SignalR重新启动,那些连接记录可能会变为孤立.(我也观察到行为让我怀疑OnDisconnected()是否被正确调用,尽管我对此不太确定.)
但无论出于何种原因,我会定期在我的数据库中找到孤立的记录,我希望能够修剪那些,并删除任何实际上没有连接的ConnectionID - 大概是让SignalR告诉我是否此ConnectionID仍与实时会话相关联.
我已经查看了SignalR信号源,并没有向我跳出如何最好地完成此任务.有合理的方法吗?
实现这一目标的方法是自行跟踪客户。从您的帖子来看,您似乎已经在这样做(如果您没有这样做,仍然提供代码),但这是了解客户端是否已连接的唯一方法。SignalR 服务器触发 onconnected/ondisconnected 事件作为指示客户端是否已连接的方式。
我建议确保您在重新连接时不会错误地重新实例化数据库中的记录。
例如(超级简单的例子):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以在集线器上调用 IsConnected 来确定连接 ID 当前是否已连接。
| 归档时间: |
|
| 查看次数: |
4913 次 |
| 最近记录: |