2011-10-12 63 views
11

我正在考慮更新現有網站以使用SignalR。我的網站對第三方服務進行了數據更改的輪詢,對其進行了一些修改,客戶端每隔幾分鐘就會輪詢一次,以便更新其視圖。SignalR具有不可靠或暫停和重新連接的連接?

SignalR似乎是消除客戶端輪詢的好方法,但我想知道SignalR如何處理掉&重新連接的連接,尤其是關於可能已暫停一段時間的移動web應用程序。它會自動協商並排隊同時丟失的任何更新,還是客戶需要在這些情況下從頭開始重新同步?我看了,但無法找到任何文件,所以不勝感激。

回答

10

所有這一切都是可能的,因爲客戶端跟蹤它看到的最後一個消息ID。如果它錯過了消息,它會在下一次返回到服務器時得到這些消息(從最後一次看到消息後請求所有消息)。

默認情況下,SignalR的服務器端將消息存儲在內存中(並且每隔幾秒清除一次),但是如果您考慮客戶端正在脫機並且您可以將其更改爲持久存儲(請參見IMessageStore)趕上。

你甚至可以在自己的應用程序邏輯中堅持自己的消息,而SignalR將內容存儲在內存中。這真的取決於應用程序。

我們沒有爲移動客戶端添加任何特殊支持,但您可以將消息ID保存在您的移動客戶端所需的任何本地存儲中。

這些細節不是很具體,但你想要做的就是所有可能的SignalR。

+0

很酷,謝謝。額外的信用:你能指點我的任何演示應用程序/代碼這樣做嗎? –

+0

不,我不能:)。 SignalR是全新的,我們迄今尚未在移動設備上做很多工作。 – davidfowl

+0

好啊。它是移動的事實並不直接相關,但它可以指望**來自網絡的中斷(_ *咳嗽* AT&T_),應用程序暫停/終止而不發出警告等。聽起來像它有需要的低級別掛鉤 - 請求中的ID,IMessageStore - 將自己建立在其他頂部。將分享,如果我可以充分泛化它! –

0

Understanding and Handling Connection Lifetime Events in SignalR,特別是以下部分:

該文檔是在2014年編寫的,基本上廢棄了許多來自2011-2012年代的錯誤或不完整的StackOverflow SignalR相關問題/答案。