2012-04-23 35 views
8

假設我的網絡連接斷開幾秒鐘,我錯過了一些SignalR服務器推送的消息。SignalR可以處理錯過的消息嗎?

當我重新獲得網絡連接時,我錯過了丟失的消息嗎?或者signalR處理它們並在我重新連接時將它們推出?

如果它不能處理遺漏的消息,那麼確保一致性的建議方法是什麼?

  • 定期(2-3分鐘)輪詢檢查服務器數據?
  • 以某種方式檢測客戶端網絡的丟失,並執行ajax調用以獲取有關網絡恢復的數據?
  • 別的東西?

回答

7

這裏有一對夫婦的想法:

如果沒有發送大量每秒的消息,考慮消息本身不發送數據。相反,這條消息對客戶來說只是一個「平臺」,告訴他們在可能的時候獲取服務器數據。正如你所說,把它與定期調查結合起來,你可以放心,你不會錯過任何信息。他們可能會延遲。

如果您要快速發送大量消息,那麼如何爲每個消息添加順序ID?考慮一下SQL標識列。您的客戶需要跟蹤最近收到的ID。網絡重新連接後,客戶端可以詢問自[Last ID]以來的所有消息。如果收到的消息的ID與最近收到的消息不連續,則知道發生了斷開連接,並可以向服務器請求丟失的信息。

+1

有趣的想法,我喜歡第二個,雖然如果SignalR爲我們包裝了這個功能會很好......也許在我猜的更高版本中! – reach4thelasers 2012-04-27 09:12:06

+1

我明白你想要什麼,但消息背後的想法是火和忘記。所以我不認爲這是信號的核心部分。我同意@MikeC提出的解決方法是一個很好的選擇。 – 2012-04-27 14:15:40

+0

我們是否有任何選項或功能可以像SignalR中的「隨機丟棄消息」一樣打開和關閉? – Kurkula 2016-05-04 07:02:02

相關問題