Signalr 信号员:如何在意外的页面刷新中生存

Signalr 信号员:如何在意外的页面刷新中生存,signalr,Signalr,假设两个浏览器客户端之间有一个使用Signal的聊天web应用程序。什么是最好的办法,以生存意外的F5击中一个客户端 描述了使用Cookie和自定义信号器IConnectionIdFactory的策略。但是文章的作者说“信号员小组不建议这样做”。那么推荐的体系结构是什么?当客户端连接时,您可以将临时连接id映射到永久用户id/名称(可能存储在您的数据库中)。请参见执行此操作的(至少上次我检查时是这样)。 例如,您可以在OnConnected(并在OnDisconnected)中保留表示跟踪活动用

假设两个浏览器客户端之间有一个使用Signal的聊天web应用程序。什么是最好的办法,以生存意外的F5击中一个客户端


描述了使用Cookie和自定义信号器IConnectionIdFactory的策略。但是文章的作者说“信号员小组不建议这样做”。那么推荐的体系结构是什么?

当客户端连接时,您可以将临时连接id映射到永久用户id/名称(可能存储在您的数据库中)。请参见执行此操作的(至少上次我检查时是这样)。 例如,您可以在
OnConnected
(并在
OnDisconnected
)中保留表示跟踪活动用户的用户的对象的ConcurrentDictionary,并将其与其连接ID关联,类似于:

私有静态只读ConcurrentDictionary用户
=新的ConcurrentDictionary();
已连接()的公共覆盖任务{
字符串userName=Context.User.Identity.Name;
字符串connectionId=Context.connectionId;
var user=Users.GetOrAdd(用户名,\=>newuser{
Name=用户名,
connectionId=newhashset()
});
锁(用户连接ID){
user.connectionId.Add(connectionId);
}
返回base.OnConnected();
}