SignalR维护浏览器刷新时的连接ID

时间:2014-03-13 06:55:45

标签: asp.net-mvc-4 signalr

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

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

任何帮助将不胜感激。

3 个答案:

答案 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。这个问题是具体的,所以我将总结一下。

OnReconnectedOnDisconnected为用户添加connectionId(如果有的话,还加上grup信息),但只检查connectionId唯一性(一个用户同时有多个connectionIds)。

{{1}}删除该connectionId的记录/行。如果用户在该群组中没有任何记录,则表示该用户离开了该群组。如果用户根本没有任何记录,则表示用户已断开连接。

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

我希望这有帮助。