SignalR:服务器在建立连接时如何正确订阅组

时间:2013-03-18 00:27:07

标签: asp.net .net signalr

我看了几个地方,但仍然无法找到关于如何使用群组的明确说明。我正在使用组进行过滤(仅将消息传递给客户端子集)。

我想在OnConnected事件中将客户端加入服务器端的组。客户不需要知道它属于哪个组。

问题:

  1. 我是否还应该覆盖OnReconnected事件?

  2. 作为GroupManager.Add事件的结果,我应该返回OnConnected返回的任务吗?如果我想加入多个组,我可能需要创建一个组合任务。右

  3. 3-为什么服务器(参见GroupManager.Add实现)会向客户端发送AddToGroup命令?有办法解决这个问题吗?也许通过使用Client.AllExcept(...)并手动处理服务器上的组成员身份(哎呀!)?

    我使用的是最新版本的SignalR(1.0.0.1)

1 个答案:

答案 0 :(得分:3)

  1. 您无需覆盖OnReconnected。当客户端重新连接时,它将重新加入之前所有的组。
  2. 您不必,但如果您尝试在OnConnected中发送到该组(如果您选择不返回组添加任务),则需要等到任务完成。
  3. 你不想解决这个问题,其中一个原因是因为#2(客户需要知道它在哪个组中)。如果要对要重新连接的组进行身份验证,可以始终创建集线器管道模块并覆盖BuildRejoiningGroups函数以执行自己的验证。
  4. 对评论的回应

    评论1:是的 注释2:你必须返回一个任务,否则什么都不会完成(这是设计)。如果你不知道要返回什么,你总是可以返回base.OnConnected()。

    当您调用GroupManager.Add时,它将返回一个任务,该任务表示连接何时在所需的组中。一旦加入该组,客户端就会通过令牌通知其现在在新组中。然后,令牌将允许客户端重新加入组,如果由于连接丢失而必须重新连接。