Asp.net mvc 4 浏览器刷新时保持连接Id的信号器

Asp.net mvc 4 浏览器刷新时保持连接Id的信号器,asp.net-mvc-4,signalr,Asp.net Mvc 4,Signalr,我正在使用signalr和asp.NETMVC4开发一个聊天应用程序。 如果用户第一次添加-它将分配一个连接id,他将与其他客户端聊天,但如果他刷新页面,他将分配一个新的连接id 我的问题是如何在浏览器刷新时维护用户的连接id 任何帮助都将不胜感激 如果用户是第一次添加的-它将在您存储在会话中时分配一个连接id,如果页面将刷新,则分配某个特定的静态变量。如果未传递当前id,则检查会话变量是否为空 if(Session["id"] != null ) { -- use last added

我正在使用signalr和asp.NETMVC4开发一个聊天应用程序。 如果用户第一次添加-它将分配一个连接id,他将与其他客户端聊天,但如果他刷新页面,他将分配一个新的连接id

我的问题是如何在浏览器刷新时维护用户的连接id


任何帮助都将不胜感激

如果用户是第一次添加的-它将在您存储在会话中时分配一个连接id,如果页面将刷新,则分配某个特定的静态变量。如果未传递当前id,则检查会话变量是否为空

if(Session["id"] != null )
{
   -- use last added id
}

我想这会对您有所帮助。

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

在我的解决方案中,我通过DB添加了Presidence,对于每个会话,我分配了一个唯一标识符,a将其视为信号器组,在每个浏览器刷新时,客户端将使用该唯一标识符注册,并且我将新的连接id分配给相同的唯一标识符,即组名。通过组向客户端发送消息

_signalrDispatcher.Clients.Groups("group name").SendData(data);
在本文中,我解释了如何管理ConnectionID。这个问题很具体,所以我将进行总结

OnConnected
OnReconnected
使用connectionId添加用户(如果有,加上grup信息),但只需检查connectionId的唯一性(一个用户同时有多个connectionId)

OnDisconnected
删除具有该连接ID的记录/行。如果用户在此组中没有任何记录,则表示用户离开了该组。若用户根本并没有任何记录,那个就意味着用户断开了连接

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

我希望这有帮助