2012-09-24 74 views
4

我有以下問題與SignalR與用戶從移動設備訪問我的網站。 問題是,當手機鎖定或用戶轉到另一個應用程序時,Disconnect()方法在服務器上被觸發(我嘗試向服務器發送消息並等待它回覆槽SignalR,但沒有從在服務器上觸發Disconnect方法之後的服務器)。在此之後,由於客戶端不再連接到服務器,所以會發生接縫。SignalR - 如何重新連接客戶端到服務器(如何重新啓動SignalR)

客戶端如何告訴服務器它回來了?

回答

5

您可以停止連接:

$.connection.hub.stop() 

,然後通過

$.connection.hub.start(); 

重新啓動它在SignalR的下一個版本中,我們會照顧這個要求,但對於臨時你會必須自己管理它。我建議在客戶端檢測服務器是否死機,然後運行stop - > start。

+0

在某些情況下,即使在今天的版本中,我仍然會看到這一點 - 所以提示:確保您在每次啓動時都再次執行「開始成功」活動(如果適用)。 –

0

我認爲服務器上的斷開會觸發客戶端訂閱從內存中刪除。

因此,當客戶端回來時,服務器不知道客戶端。

4

我們有類似的情況從移動設備連接。在我們的例子中,調用.Stop()或嘗試處理現有連接需要30秒,這取決於底層連接處於非活動狀態的時間。 (底層協議有可配置的超時)

我們的解決方案是清理所有處理的事件並取消引用集線器連接對象 - 然後在重新激活應用程序後重新啓動新實例。這項工作可靠,幾乎是即時的。服務器斷開連接事件也會正確觸發,儘管它會針對每個斷開連接的實例觸發。

我已經記錄了我們在這篇文章中的旅程和解決方案Best practice for reconnecting SignalR 2.0 .NET client to server hub。希望它有幫助。

相關問題