2013-05-03 40 views
3

我想知道zmq是否已經解決了以下問題(或)坐在zmq之上的應用程序需要照顧它。如何將所有數據推送到晚期用戶?

1)向所有用戶發佈數據的中央出版商。這些數據本質上是靜態的,就像配置。數據可以在任何時間點修改。
2)多個訂戶訂閱來自該發佈者的消息。出版商可以隨時加入。
3)如果數據發生變化,發佈者應該將差異發佈給現有訂閱者。
4)如果訂戶稍後加入,發佈者應該將所有數據(當前配置)發佈給新訂戶。

Zeromq指南建議以下解決慢喬伊納綜合徵,但這並沒有解決上述問題。 http://zguide.zeromq.org/page:all#Slow-Subscriber-Detection-Suicidal-Snail-Pattern

回答

2

我在設置中看到的問題是,它要求所有訂戶具有相同的狀態。如果所有用戶都在版本7並且發佈了7比8差異,那麼他們都更新到版本8.但是這需要節點之間緊密耦合的狀態同步。如果用戶不同步,你會如何處理這種情況?

考慮該替代設置:

  • 的「發佈者」具有其結合
  • 每個「訂戶」具有連接到路由器
    • 可以」單經銷商插座單個路由器插座t使用REQ套接字,因爲這將禁止發送「更新提示」(詳細內容如下)
  • 當用戶i加入t他的網絡,它會發送一個「更新」請求發佈者,從而使發佈商瞭解用戶的身份和他的當前版本的version[i]
    • 出版商提供必要的diff文件響應,使用戶i最新
  • 如果發佈者的數據發生變化(即,一個新版本)它發送「更新暗示」以所有已知的訂戶 當用戶接收到一個
    • 「更新提示」,它執行「更新」請求
  • 的(可選)訂戶定期發送「更新」請求(罕見輪詢)

這種方法具有以下優點:

  • 出版商是服務器;訂閱者是客戶端
  • 發佈者從未發起任何實際數據的發送 - 它僅響應來自客戶端的請求(即「更新提示」不包括髮送實際數據)
  • 訂戶是儘管它們可能間歇性地不同步
+0

幾個問題:1.爲什麼發送「更新提示」而不是直接發送當前狀態? 2.「出版商」能否檢測到離開網絡的「訂戶」,以便它不再嘗試向其發送更新? – khuttun 2016-03-20 13:49:45

3

「指南」中的「克隆模式」完全符合您的需求。

相關問題