2014-01-28 48 views
3

我有兩臺使用Redis的負載均衡器後面運行的signalr asp.net服務器。在負載平衡環境中丟棄服務器

當我的用戶連接並登錄時,我在Redis中存儲用戶與其連接ID之間的關聯。當我的用戶註銷/斷開連接時,我將刪除關聯。

當我離線使用兩臺服務器之一時,我的客戶端重新連接到另一臺服務器。這會導致進行另一次關聯,但不會觸發斷開連接事件來清除關閉的服務器上的關聯。

這很重要,因爲這意味着我不能再告訴客戶是否在線。

我應該如何編碼才能處理掉服務器?

回答

0

當客戶端重新連接到仍然活着的服務器時,您是否收到「OnReconnected」呼叫?當客戶端重新連接到其他服務器時,您應該採取必要的措施修復關聯。

你不能指望從一個停止的服務器得到通知,它的原因可能很多。

+0

是的,但也有可能出於任何原因,這些客戶端不會重新連接。所以這種邏輯不起作用。 – Julien

0

這裏是我去解決(我敢肯定,還有待改進)

當客戶端連接,服務器寫入Redis的連接ID爲服務器的主機名鍵列表。

每臺服務器每隔30秒運行一次任務,寫入Redis的主機名和當前時間。

每臺服務器還會每30秒運行一次任務,檢查未在X時間內更新其時間戳的服務器。

當發現某個服務器不再「心跳」時,它會爲停止服務器提取連接ID並運行清理。