Signalr 连接到多个集线器并仅从一个集线器断开连接
我正在用Durandal编写一个单页应用程序,并计划使用SignalR实现一些功能。首先,我有一个顶部栏,用于侦听服务器可能发送的通知。站点启动到“TopBarNotificationHub”的连接 在其中一个页面上,我想连接到另一个中心,因为两个用户可能同时编辑此页面上的数据,我想通知是否有人更新了数据。没问题,这个很好用 但是,当离开该页面时,我只想断开与第二个集线器的连接,但我找不到实现这一点的方法。如果我只说hub.connection.stop();与eTopBarNotificationHub的连接也会停止(因为它是共享的) 有没有办法只留下一个代理而让另一个存在 由于这是一个SPA,“外壳”永远不会重新加载,因此它不会再次连接到集线器。。。我可能能够在每次另一个页面与集线器断开连接时强制重新连接,但可能有更干净的解决方案 提前谢谢Signalr 连接到多个集线器并仅从一个集线器断开连接,signalr,Signalr,我正在用Durandal编写一个单页应用程序,并计划使用SignalR实现一些功能。首先,我有一个顶部栏,用于侦听服务器可能发送的通知。站点启动到“TopBarNotificationHub”的连接 在其中一个页面上,我想连接到另一个中心,因为两个用户可能同时编辑此页面上的数据,我想通知是否有人更新了数据。没问题,这个很好用 但是,当离开该页面时,我只想断开与第二个集线器的连接,但我找不到实现这一点的方法。如果我只说hub.connection.stop();与eTopBarNotificati
//J如果您在一个页面上使用多个集线器,这很好,但它们共享相同的连接,因此除了接收更新之外,它不会占用客户端上更多的资源 因此,要“连接和断开集线器”,您需要稍微重新安装。如果在服务器端使用组而不是客户机,则可以通过调用(例如)
Hub1.register
方法并将客户机固定在该方法中的相关组中,向集线器“注册”。要“取消注册”,您可以调用(例如)Hub1。取消注册
,并从该方法中的组中删除客户端的连接ID
。然后,当您将更新推送到客户端时,您可以只使用组而不是客户端。All
(C#假定为服务器语言,因为您没有在标记中指定)
- 要将客户端添加到中心组:
Groups.add(Context.ConnectionId,groupNameForHub)代码>
- 要从集线器组中删除客户端:
Groups.remove(Context.ConnectionId,id.ToString())代码>
- 要向该中心的客户端广播:
clients.Group(groupNameForHub.clientMethodName(param1,param2)代码>
你的服务器语言是什么?它不在您的标签中(使答案中的示例更容易),谢谢!我忽略了“组”的概念,并将中心视为一个组,而不是在中心内部定义的组。谢谢你的澄清!您是建议在一个集线器中使用多个集线器组,还是建议每个集线器使用一个组?