2014-10-02 86 views
1

我有一個SignalR HUB,用於維護各種連接客戶端的內存存儲庫,其中包含一些用於處理請求的數據。理想情況下,這些客戶將始終保持聯繫。如何在循環SignalR集線器時關閉連接

我遇到的問題是當我們需要將補丁推送到集線器時,我們發佈它並回收服務器。這種情況發生得很快,客戶端仍保持其連接,但由於網站已被回收,集線器使用的內存已被清除,並且存儲庫不再存在。

也許這是我的設計缺陷,但有沒有辦法強制連接在循環服務器時丟失,或者我應該使用除了簡單的內存中的單例之外的東西來存儲我的存儲庫?或者我誤解了這裏發生的事情?

回答

1

可以使用類似的東西是什麼張貼在這裏:OnDisconnect and Logged on Users after recycle?

我有同樣的問題,我所做的是:

1,使所有客戶註冊「ForceRestart」功能:

_proxy.On("ForceRestart",() => _hub.Stop()); 

2-所以在服務器的構造中,當(I在存儲器跟蹤)連接的客戶端的數量是零,則表示服務器已被回收或服務器是全新的,所以我呼籲:

IHubContext _hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
_hubContext.Clients.All.ForceRestart(); 

這樣,我清理所有剩餘的虛擬連接。我希望這有幫助。

+0

這與我的想法是一致的,只是不確定是否有更好的方法。感謝您的輸入! – amnesia 2014-11-10 13:47:04

-1

在signalr文檔中有很多很好的信息。檢查「服務器斷開連接的情況」的一部分this

+0

我已經詳細研究了這個頁面,我們確實有處理所有斷開連接的情況,但是這並沒有解決我的文章中的特定問題。 – amnesia 2014-10-04 13:13:41