2012-11-26 53 views
1

我試圖在斷開連接時重新連接到Redis服務器。與hiredis重新連接

我正在使用redisAsyncConnect,並且我在斷開連接時設置了回調。在回調中,我嘗試重新連接與我在程序開始時使用的相同命令來建立連接,但它不起作用。似乎無法重新連接。

任何人都可以幫我一個例子嗎?

+0

您可以查看redis Ruby gem代碼並查看它的功能。有了寶石,如果有斷開連接,下一個命令似乎可靠地重新建立連接。 – Gene

回答

2

當使用事件循環時,異步管理Redis(re)連接有點棘手。

下面是一個實現小型zset輪詢守護程序的示例,該守護程序連接到Redis實例列表,這對於斷開連接事件是有彈性的。使用ae事件循環(這是Redis自己使用的循環)。

http://gist.github.com/4149768

檢查以下功能:

  • connectCallback
  • disconnectCallback
  • checkConnections
  • reconnectIfNeeded

主要daemo只有當連接可用時,n循環纔會執行其活動。每秒一次,第二次啓動回調檢查是否必須重新建立一些連接。我們發現這種機制相當可靠。

注意:爲簡潔起見,此示例中的錯誤管理很粗糙。真正的生產代碼應該以更優雅的方式管理錯誤。

處理多個異步連接時的一個棘手問題是,沒有用戶定義的上下文數據作爲相應回調的參數傳遞。在斷開連接事件後清除與連接相關的數據可能有點困難。

+0

感謝Didier,正是我所需要的。我想出了一些非常相似的東西,但是我沒有將回調重新附加到事件循環中。不知道這是否是問題,因爲還有其他差異,但您的示例非常有幫助。 – gkres