signalR 中的重新連接何時發生?
我已經開始使用 SignalR 並試圖弄清楚何時發生集線器重新連接。我在網上沒有找到任何令人滿意的解釋。有人可以解釋何時/為什麼會發生重新連接嗎?
當客戶端離線然後很快重新連接時,會發生集線器重新連接。SignalR 配置值在很大程度上決定了以下範例的時間戳,因此不要逐字記錄時間。
以下是涉及重新連接行為的幾個範例及其結果(時間格式 m:ss):
當我提到以下內容時,我指的是伺服器端 Hub 方法
- 已連接
- 斷開連接
- 重新連接
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 - 客戶端轉換為斷開連接狀態
- 由於客戶端保持活動檢查:用於確定客戶端何時由於缺乏保持活動而離線。不用於長輪詢傳輸
** 由於客戶端斷開連接超時:用於確定客戶端何時重新連接太長時間,並且伺服器可能在此期間忘記了客戶端
*** 由於伺服器斷開連接超時:用於確定何時應該忘記客戶端。這是一個時間跨度,一旦連接在伺服器上被標記為死,就會開始累積。最終,伺服器為客戶端的主題排隊一個斷開命令,告訴客戶端(如果它重新連接)它需要開始一個新的連接。清理主題後,該命令將從伺服器中消失。
希望這可以幫助!