2012-08-08 59 views
2

我想在连接到我的集线器类时将用户映射到连接标识符,有效地完成此操作的策略是什么?我想将用户的个人资料与他的连接ID关联起来,因此当我查看某个特定信号员组中的用户时,我可以轻松地为每个用户的个人资料信息添加内容什么是将用户映射到连接ID的最佳方式

回答

4

从技术上讲,如果您不担心维护状态,可怜的人在内存ConcurrentDictionary<string, ConcurrentBag<string>>,但我会假设你正在尝试比这更容易扩展/容错。

JabbR是SignalR框架的旗舰测试平台聊天应用程序,它将连接的客户端详细信息存储在其DB(恰好是SQL)的表中。它具有单个ChatUser - >到许多ChatClient实例(一对多)的映射。这样,当一个逻辑用户登录时,它就知道该用户是谁的逻辑,并且还可以确保它能够将正确的消息引导到用户当前可能打开的所有连接的客户端实例。如果您有兴趣了解更多信息,请致电You can find that specific implementation here

+0

您是否必须考虑db解决方案的并发性?另外,如何处理服务器关闭时的情况?所有映射仍然保存在数据库中,那么每次启动ap时都必须截断表格? – anthonypliu 2012-08-30 20:43:58

+0

当然,您必须处理您在任何应用程序中必须处理的所有常见并发/可伸缩性问题。至于联网用户,是的,当你重新启动时,你必须弄清楚发生了什么。 JabbR通过在应用程序启动过程中清除整个表格来实现这一点,尽管这是简单的,蛮力的,可能不是您可能拥有的最优雅的解决方案......特别是对于托管的应用程序:https://github.com/davidfowl/ JabbR/blob/master/JabbR/App_Start/Bootstrapper.cs#L146 – 2012-08-30 22:15:02

+0

感谢您的回应,但那时您会有什么建议。我如何能够在一个农场托管的应用程序中管理它。一台服务器关闭,它将如何知道从哪个用户删除表格? – anthonypliu 2012-08-30 22:20:02

相关问题