这是我的问题,我想跟踪用户是在线还是离线并通知其他客户。我正在使用集线器并实现了 IConnected 和 IDisconnect 接口(interface)。
我的想法是在集线器检测到连接或断开连接时向所有客户端发送通知。默认情况下,当用户刷新页面时,他将获得新的连接 ID,最终先前的连接将调用断开连接,通知其他客户端用户离线,即使他实际上在线。
我尝试使用我自己的 ConnectionIdFactory 返回连接 ID 的用户名,但是在某些时候打开了多个选项卡,它会检测到用户连接 ID 已断开连接,之后客户端集线器将尝试以无休止的循环浪费内存和 cpu 连接到集线器而导致浏览器几乎无法使用。我需要快速修复它,所以我删除了我的工厂,现在我使用用户名将每个新连接添加到组中,这样我就可以轻松地通知所有连接的单个用户,但是当我检测用户是在线还是离线时,我遇到了问题不知道有多少事件连接用户。
所以我想知道有没有办法在一个组中获得连接数?或者,如果有人对如何跟踪用户何时下线有更好的了解?
我正在使用 Signalr 0.4
最佳答案
找到了解决方法:
重写 ConnectionId
,因此在每个标签中,您将拥有相同的 ConnectionId
:
public class MyConnectionFactory : IConnectionIdGenerator
{
public string GenerateConnectionId(IRequest request)
{
return MyUserManager.Instance.CurrentUserID.ToString();
}
}
添加到 global.asax:
GlobalHost.DependencyResolver.Register(typeof(IConnectionIdGenerator), () => new MyConnectionFactory());
我设法打开尽可能多的标签,并且所有标签都会收到通知。
关于signalr - 有没有办法获得 Signalr 集线器组中的连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979524/