C# 计算并列出信号器中的连接件

C# 计算并列出信号器中的连接件,c#,signalr,C#,Signalr,根据,无法列出或检查已连接客户端的数量。然而,这个答复有点过时,我想知道它是否仍然有效 它是服务器记录所有连接和断开连接的唯一选项吗? 是否至少有一些功能可以帮助我们检测断开连接?绝对有办法 许多人通过创建一个包含您定义的任何自定义用户对象的并发字典的单例类来处理这个问题。如果在连接时将自定义用户对象添加到此词典,并在断开连接时将其删除,则可以查询词典中的活动用户数。请记住,它可能不会精确到秒,因为大约有30秒的“中止”窗口可能仍然处于活动状态,即使客户端不再处于活动状态,因为他们关闭了浏览器

根据,无法列出或检查已连接客户端的数量。然而,这个答复有点过时,我想知道它是否仍然有效

它是服务器记录所有连接和断开连接的唯一选项吗?
是否至少有一些功能可以帮助我们检测断开连接?

绝对有办法

许多人通过创建一个包含您定义的任何自定义用户对象的并发字典的单例类来处理这个问题。如果在连接时将自定义用户对象添加到此词典,并在断开连接时将其删除,则可以查询词典中的活动用户数。请记住,它可能不会精确到秒,因为大约有30秒的“中止”窗口可能仍然处于活动状态,即使客户端不再处于活动状态,因为他们关闭了浏览器

现在,SignalR中是否有真正的“硬烘焙”功能可以为您实现这一点?我不知道,但我还没有对2.0做过详尽的研究。至于检测断开连接,它相当健壮,如果未检测到连接,它将删除前面提到的连接,从而使您能够控制断开连接

这里有一个很好的教程介绍了这种方法:


所以或多或少都是我展示的链接中描述的方式,对吗?我想这就足够了。但我希望有更强健的东西。是否有一个推荐的、专门的类来处理客户,或者最好自己编写一个?不幸的是,我自己的所有研究都没有发现任何可以直接从库中使用的内置工具。我链接的教程可能是更标准的方法之一,它使用单例模式来保存字典实例。我自己也曾在生产中使用过,而且效果很好。ConcurrentDictionary还可以保证线程安全