2013-02-17 138 views
3

我想確保我正確地爲SignalR庫實現組功能。Signalr Connect斷開並重新連接

我正在做的是讓用戶爲特定項目尋求幫助。啓動該項目的用戶可以將其他用戶添加到他們項目的協作表中。

Collaboration 
(
    UserID Uniqueidentifier, 
    ProjectID INT 
) 

如果任一用戶進入合作模式,我想給該用戶,所以如果另一個用戶登錄並進入它們加入到同組的合作模式添加到組。這些組總是被命名爲ProjectID

所以,當用戶登錄並打開項目,如果該項目在協作表中,我將它們添加到Groups.Add(Conext.ConnectionId,projID);


這裏是我的問題:

當用戶從客戶端連接,如果與PROJID沒有組存在將在拋出錯誤或將signalr只是動態創建該組的OnConnected被稱爲?

public override Task OnConnected(string projID) 
    { 
     return Groups.Add(this.Context.ConnectionId, projID); 
    } 

當客戶端關閉瀏覽器時,OnDisconnected是否被調用? 如果該用戶由於某種原因不在所述projID組中,這會拋出錯誤或將信號處理器處理這個?

public override Task OnConnected(string projID) 
    { 
     return Groups.Add(this.Context.ConnectionId, projID); 
    } 

對於OnReconnected,這是否意味着如果用戶註銷並做別的事情,然後重新登錄,他們會自動添加回他們那裏的連接丟失之前部分羣體?

public override Task OnReconnected(string projID) 
    { 
     return Clients.Group(projID).rejoined(Context.ConnectionId, 
      DateTime.Now.ToString()); 
    } 

對於上述所有方法,我是否需要調用每個覆蓋方法的基方法?當你調用Groups.Add()的 首次爲一個特定的projID

+1

沒有冒犯隊友,但你爲什麼不試試呢? 1.如果不存在則創建。 2.會話結束時會調用斷開連接(瀏覽器關閉事件);它不會拋出錯誤,並且如果該用戶不在該組中,將被處理。 3.重新連接是因爲客戶沒有在一段時間內發送心跳,並且由於網絡連接丟失等突然重新連接。您發佈的代碼在重新連接後處理用戶重新添加到該組的新連接ID。 – f0x 2013-02-17 19:43:12

+0

爲什麼你只是回答這個評論,我可以標記你的評論作爲答案? – 2013-02-17 19:48:58

回答

7
  1. SignalR將創建組。它不會拋出錯誤。
  2. OnDisconnected在連接消失時被調用。如果你 請致電Stop()有一個乾淨的斷開連接,並立即調用方法。如果您剛剛關閉瀏覽器,通常會在延遲 約30秒後(有一個配置開關來控制此方法)調用方法
  3. 用戶根據其連接標識綁定到特定組。如果 用戶回來了一個不同的連接ID,您將不得不 再次將其添加到相應的組。您可以查看SignalR提供的 聊天示例,瞭解如何處理此類案例可以處理的內容。
相關問題