2012-10-04 71 views
8

我使用SignalR(0.5.3)樞紐聊天應用程序,每個按鍵被髮送到服務器(保存在DB),傳達給所有的客戶端和返回值(字符串標記的種類)從服務器發回。SignalR連接處理上的應用程序池回收

它工作正常,直到應用程序池回收,然後停止向所有客戶端傳遞鍵擊(因爲內存服務器狀態會丟失,我想),服務器也不會返回任何值。在這一點上,我想通過SignalR的所有請求都由IIS排隊,然後在應用程序池被回收後處理。

我的問題是如何處理這種情況下,讓所有的客戶都知道服務器不可用/延遲是由於應用程序池回收,通知用戶等待一段時間,然後重新上重新連接操作?

回答

4

有兩個選項。

爲0.5.3,你可以當客戶端進入「重新連接」或「斷開」檢測並通知用戶有服務器問題。請記住,在大多數情況下,如果服務器消失,客戶端實際上不會知道它已斷開連接。

OR

如果您等待下一個版本(1.0alpha),我們會照顧大頭本的爲您服務。在缺少服務器的情況下,我們將觸發一個onConnectionSlow事件,這將導致客戶端切換到「重新連接」狀態(如果它沒有收到任何信息),直到服務器重新聯機爲止。客戶端也會知道服務器是否會消失(我們正在添加此功能)以應對邊緣情況,例如應用程序池回收。

希望這會有所幫助!

+0

上的選項1:你是對的,客戶端只得到一個長期的延遲(超時)知道後斷開的,通過重新連接/斷開事件,這樣的處理可以不工作,但我還是給它一個鏡頭。 – Nick

+0

@泰勒馬倫 - 嗨,我正確地認爲這意味着從0.5.3開始,如果信號服務器消失,客戶端可能會卡住嘗試重新連接,直到超時,並且客戶端沒有可以發生的事件用於檢測此刻?歡呼聲將 – Will

+0

@這是部分正確的。在0.5.3中,您將不會收到任何特定事件,例如「nowReconnecting」,但您可以檢測到SignalR嘗試通過stateChanged事件重新連接。當我們進入重新連接狀態時,stateChanged事件將觸發,並且新的連接狀態將重新連接。此外,客戶端沒有超時,它會嘗試永久重新連接。 –