Dan*_*san 26 asp.net notifications signalr signalr-hub
考虑像Facebook这样的Web应用程序,它可以向用户发送实时通知.
使用asp.net SignalR来跟踪哪个连接ID属于哪个用户的最佳方法是什么,即使用户断开连接或稍后重新连接?
tug*_*erk 27
查看以下博文:
简而言之,您将在OnConnected方法上向用户添加连接ID 并删除该OnDisconnected方法上的该连接.请记住,应用程序用户可以拥有多个连接.因此,您需要在用户和连接ID之间建立一对多的关系.以上链接的帖子详细解释了它的样本.
我为内部应用做了这个.我这样做的方式是当用户连接时,我让服务器要求用户注册自己.这样我知道不仅用户连接了他们的signalR connnectionID,而且他们还可以告诉我任何其他信息(如用户名或其他).
当他们重新连接时,我要求他们再做一次.
SignalR将为每个客户端维护相同的connectionID,即使它们重新连接也很好.重新连接与初始连接不同.新连接表示新客户端,但重新连接在同一客户端上.
在我的应用程序中,我维护了一个单独的线程安全字典,我跟踪哪个用户和哪个connectionID正在做什么.这样我可以说"哦,向用户ABC发送消息"并查找其connectionID.然后在signalR中为该connectionID执行Hub的客户端对象.如果你这样做,你甚至可以在mutliple连接中拥有相同的"用户".想象一下,用户"abc"在两个浏览器选项卡中打开.如果你严格按照connectionID进行操作,那么他们在技术上就是两个不同的用户.但是,通过维护某种本地集合分组用户和连接,您现在可以为同一用户建立多个连接.
我应该提一下,如果你这样做,你应该确保你的网站处理重启时发生的事情,并丢失所有的连接信息.对我来说,当有人重新连接时,我要求他们再次重新认识自己.这样,当服务器上线时我可以重新构建我的本地字典而不用担心.它确实有更多的开销,因为现在您要求所有客户向您发送信息,但根据您的用户情况,这可能会交错或聚集或以其他方式分发以帮助您处理负载.
通常,无论您获得本地信息(无论是通过要求用户提供),还是通过http上下文会话信息,您都需要自己跟踪它.
| 归档时间: |
|
| 查看次数: |
27436 次 |
| 最近记录: |