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

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

问题描述:

我已经看了几个地方,但仍然找不到关于如何使用组的明确说明。我正在使用一个组进行过滤(仅将消息传递给客户端子集)。SignalR:连接建立时服务器如何正确订阅组

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

问题:

  1. 我应该也覆盖OnReconnected事件?

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

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

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

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

回应评论

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

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

+0

因此,Ad3的原因 - 客户端应该知道他所属的组是客户端在重新连接时自动发送组成员资格? – matra 2013-03-18 06:19:20

+0

Ad2):如果我不从OnConnect返回任务,则客户端不会收到消息(即使服务器端延迟了10秒)。另见[这个问题](http://stackoverflow.com/questions/14803682/signalr-groups-not-invoked)。如果我不从'OnConnected'返回,谁开始由'GroupManager.Add'返回的任务? 'MessageBus.ScheduleTopic' /'MessageBroker.Schedule'? – matra 2013-03-18 06:28:51

+0

编辑我的回答 – 2013-03-18 07:45:20