當客戶端脫機然后不久后重新獲得連接時,就會發生集線器重新連接。 SignalR配置值在很大程度上決定了以下示例的時間戳,因此無需逐字記錄時間。
以下是一些示例及其涉及重新連接行為的結果(時間格式:m:ss):
當我提到以下內容時,我指的是服務器端Hub方法
聯機
斷開連接
OnReconnected
1)
0:00-客戶端連接到服務器,觸發OnConnected
0:10-客戶端由于ISP問題而失去連接(并意識到它失去了連接)
0:15-客戶端重新獲得連接
0:16-觸發OnReconnected事件
2)
0:00-客戶端連接到服務器,觸發OnConnected
0:10-客戶端由于拉以太網電纜而失去連接(未意識到已斷開連接)
0:15-客戶端重新獲得連接
這里可能發生兩件事
A:0:16-什么也沒發生,客戶端繼續之前的連接
B:0:?45-客戶端意識到其斷開連接*
B:0:46-客戶端轉換為重新連接狀態
B:0:47-客戶端成功重新連接,并且觸發了OnReconnected事件。
3)
0:00-客戶端連接到服務器,觸發OnConnected
0:10-客戶端由于拉以太網電纜而失去連接(未意識到已斷開連接)
0:?45-客戶端意識到其斷開連接*
0:46-客戶端轉換為重新連接狀態
1:15-服務器確定客戶端已離開太久,然后忘記了這一點,排隊一個“斷開連接”命令,以便客戶端稍晚重新連接時可以接收。 ***
1:15-觸發了OnDisconnected
1:16-客戶端重新獲得連接
1:17-客戶端進行“軟”重新連接(不會觸發OnReconnected)
1:18-客戶端檢索“斷開連接”命令
1:19-客戶端呼叫“停止”并進行軟斷開連接(不會觸發OnDisconnected)
4)
0:00-客戶端連接到服務器,觸發OnConnected
0:10-客戶端由于拉以太網電纜而失去連接(未意識到已斷開連接)
0:?45-客戶端意識到其斷開連接*
0:46-客戶端轉換為重新連接狀態
1:15-服務器確定客戶端已離開太久,然后忘記了這一點,排隊一個“斷開連接”命令,以便客戶端稍晚重新連接時可以接收。 ***
1:15-觸發了OnDisconnected
1:30-客戶端停止嘗試重新連接(嘗試時間過長)**
1:30-客戶端轉換為斷開狀態
*由于客戶端保持活動狀態檢查:用于確定客戶端由于缺少保持活動狀態而脫機的時間。 不用于長輪詢運輸
**由于客戶端斷開連接超時:用于確定客戶端重新連接的時間過長,以及服務器在這段時間內是否忘記了客戶端
***由于服務器斷開連接超時:用于確定何時應該忘記客戶端。 一旦在服務器上將連接標記為無效后,這個時間跨度就會開始累積。 最終,服務器在客戶端主題的斷開連接隊列中排隊,該命令告訴客戶端(如果重新連接)它需要開始新的連接。 清理主題后,該命令將從服務器中消失。
希望這可以幫助!