2016-05-15 59 views
1

我有幾個運行Web應用程序的iPad。 Web應用程序通過signalR與服務器進行通信。原因是服務器需要將特定數據發送到特定的iPad。因此它需要跟蹤哪些iPad開/關。如何使用SignalR處理移動設備上的斷開連接事件?

iPad有以下方法讓應用程序進入睡眠狀態。

  1. 的iPad進入睡眠狀態
  2. 用戶殺死野生動物園
  3. iPad的內存用完

我如何檢測這些服務器上?所以我不知道給他們發送數據。 我試過斷開連接事件,但是需要時間才能觸發(默認45秒)。

回答

1

簡短的回答是,在連接超時之前,您肯定不會知道,因爲SignalR在此之前不會知道。

即使在看起來最像它應該導致某種信號,你可以陷阱 - iPad過渡到待機狀態 - 沒有通知,你可以在你的JavaScript代碼,讓你整理你的連接在那之前發生。

根據您發送給客戶端的數據的性質,您可以通過切換到數據可用通知格式來最大限度地減少緩衝,服務器向客戶端發送最小數據包以通知其數據是等待被檢索,然後讓客戶端請求信息。在某些情況下,這可以極大地減少在應用程序或傳輸層中緩衝的數據量。

當然,如果每個通知有幾千字節的數據,並且您必須保留它們以便順序傳輸,這隻會減少傳輸層的緩衝,將其移回一步並使其成爲應用程序的責任。

另一種選擇是讓客戶端發送從JS定時器實例運行的心跳。每隔一秒左右(取決於你需要的實時性),客戶端在服務器上調用一個方法,它基本上只是讓你知道哪些仍然存在。經過幾次失敗的登記 - 例如5次錯過了聽力 - 你可以假設客戶已經離開,並停止發送信息。服務器將需要跟蹤每個客戶端連接的最後一次檢測信號,並且每次您想要將某些內容發送給特定客戶端時,只需檢查它是否最近檢入過。如果沒有,讓數據提供者知道客戶端處於脫機狀態,直到它再次檢入,此時您可能需要告訴它重新加載並重新開始。

相關問題