SignalR在浏览器刷新时如何保持连接ID

5
我正在使用SignalR和ASP.NET MVC 4开发聊天应用程序。 如果用户第一次添加,则将分配一个连接ID,并与其他客户端进行聊天,但是如果他刷新页面,则会分配一个新的连接ID。
我的问题是如何在浏览器刷新时保持用户的连接ID?
感谢任何帮助。
3个回答

1
如果第一次添加用户,则分配一个连接ID,将其存储在会话中或某个特定的静态变量中。如果页面刷新,检查会话变量是否为空,如果不为空,则传递当前ID。
if(Session["id"] != null )
{
   -- use last added id
}

我认为这可以帮助你。

0

我会通过数据库或缓存添加持久性。

在我的解决方案中,我通过数据库添加了持久性,为每个会话分配了唯一的标识符,该标识符被视为 SignalR 组,并在每次浏览器刷新时,客户端都会使用该唯一标识符注册,并将新连接 ID 分配给相同的唯一标识符,即组名。向客户端发送消息是通过组完成的。

_signalrDispatcher.Clients.Groups("group name").SendData(data);

0

在这个答案中,我已经解释了如何管理connectionIds。问题很具体,所以我会总结一下。

OnConnectedOnReconnected添加带有connectionId的用户(如果您有组信息,则还要添加组信息),但只检查connectionId的唯一性(一个用户同时拥有多个connectionIds)。

OnDisconnected删除具有该connectionId的记录/行。如果用户在此组中没有任何记录,则表示用户已离开该组。如果用户根本没有任何记录剩余,则表示用户已断开连接。

您应该使用共享存储来保留这些记录。因为如果您有多个实例,它们需要共享相同的数据。我建议您使用数据库,但您也可以使用缓存或会话(如果像redis一样共享)。

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接