我正在使用SignalR和ASP.NET MVC 4开发聊天应用程序。
如果用户第一次添加,则将分配一个连接ID,并与其他客户端进行聊天,但是如果他刷新页面,则会分配一个新的连接ID。
我的问题是如何在浏览器刷新时保持用户的连接ID?
感谢任何帮助。
我的问题是如何在浏览器刷新时保持用户的连接ID?
感谢任何帮助。
if(Session["id"] != null )
{
-- use last added id
}
我会通过数据库或缓存添加持久性。
在我的解决方案中,我通过数据库添加了持久性,为每个会话分配了唯一的标识符,该标识符被视为 SignalR 组,并在每次浏览器刷新时,客户端都会使用该唯一标识符注册,并将新连接 ID 分配给相同的唯一标识符,即组名。向客户端发送消息是通过组完成的。
_signalrDispatcher.Clients.Groups("group name").SendData(data);
在这个答案中,我已经解释了如何管理connectionIds。问题很具体,所以我会总结一下。
OnConnected
和OnReconnected
添加带有connectionId的用户(如果您有组信息,则还要添加组信息),但只检查connectionId的唯一性(一个用户同时拥有多个connectionIds)。
OnDisconnected
删除具有该connectionId的记录/行。如果用户在此组中没有任何记录,则表示用户已离开该组。如果用户根本没有任何记录剩余,则表示用户已断开连接。
您应该使用共享存储来保留这些记录。因为如果您有多个实例,它们需要共享相同的数据。我建议您使用数据库,但您也可以使用缓存或会话(如果像redis一样共享)。
希望这可以帮助到您。