我正在使用signalr和asp.net mvc 4开发聊天应用程序。 如果用户第一次添加 - 它将分配连接ID并与其他客户聊天,但如果他刷新页面,他将分配新的连接ID。
我的问题是如何在浏览器刷新时维护用户的连接ID?
任何帮助将不胜感激。
答案 0 :(得分:1)
如果第一次添加用户 - 它将分配一个连接ID,表示您在Session中存储的时间或某个特定的静态变量,如果页面将刷新该时间,则检查Session变量是否为空,如果未传递当前ID
if(Session["id"] != null )
{
-- use last added id
}
我认为这可以帮到你。
答案 1 :(得分:0)
我会通过数据库或缓存添加持久性。
在我的解决方案中,我通过DB添加了主席,为每个会话我分配了一个唯一的标识符,其被视为signalR组,并且在每个浏览器上刷新客户端将使用该唯一标识符注册,并且我将分配新的连接id为相同的唯一标识符,即组名。并通过群组向客户发送消息。
_signalrDispatcher.Clients.Groups("group name").SendData(data);
答案 2 :(得分:0)
在此answer中,我已解释了如何管理connectionIds。这个问题是具体的,所以我将总结一下。
OnReconnected
和OnDisconnected
为用户添加connectionId(如果有的话,还加上grup信息),但只检查connectionId唯一性(一个用户同时有多个connectionIds)。
{{1}}删除该connectionId的记录/行。如果用户在该群组中没有任何记录,则表示该用户离开了该群组。如果用户根本没有任何记录,则表示用户已断开连接。
您应该使用共享存储来保存此记录。因为如果您有多个实例,则需要共享相同的数据。我建议你使用数据库,但你可以使用缓存或会话(如果它像redis一样共享)。
我希望这有帮助。