2013-03-18 102 views
2

我已經看了幾個地方,但仍然找不到關於如何使用組的明確說明。我正在使用一個組進行過濾(僅將消息傳遞給客戶端子集)。SignalR:連接建立時服務器如何正確訂閱組

我想加入一個客戶端在OnConnected事件服務器端的組。客戶不需要知道它屬於哪個組。

問題:

  1. 我應該也覆蓋OnReconnected事件?

  2. 作爲OnConnected事件的結果,我應該返回從GroupManager.Add返回的任務嗎?如果我想加入多個組,我可能需要創建一個組合任務。對?

3-爲什麼服務器(見GroupManager.Add實現)發送AddToGroup命令的客戶端?有沒有辦法解決這個問題?也許通過使用Client.AllExcept(...)並手動處理服務器上的組成員身份(yuck!)?

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

回答

3
  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

相關問題