2015-09-09 96 views
0

例如在發佈我們正在使用的任何消息setTimeout()ZeroMQ - 如何擺脫發佈消息的zeromq zmq實現setTimeout?

我試圖刪除超時,但它不發佈任何消息。

setTimeout(function() { 
       var t = pub.send(mes + ' ' + stringObject, 0); 
       }, 1000); 

我正在使用NodeJS ZMQ npm模塊。

有沒有其他方法PUB/SUB模式沒有添加setTimeout()函數?

感謝

回答

1

我強烈建議你閱讀the guide,它回答了與許多人一起這個問題。

你需要添加setTimeout()是因爲當準備的PUB插座將發送該消息的原因,它不會等到用戶準備。那麼,這是怎麼回事,當你忽略超時上是類似以下內容:

 SETUP PUB    SETUP SUB 
      |      | 
      BIND      | 
      |      CONNECT 
      |      | 
    FINISH BINDING     | 
      |      | 
      |      | 
     SEND MSG1--[|    | 
      |      | 
      |]--------------FINISH CONNECTING 
      |      | 
     SEND MSG2----    | 
      |   |    | 
      |   ----   | 
      |    |   | 
      |    ----[RECV MSG2] 
      |      | 
      ...      ... 

...您的出版商可以bind()立即,它並不需要去做出任何網絡資源的請求。您的訂閱者必須外出並與發佈商建立連接,這需要時間。因此,發佈者已準備就緒,並且將MSG1發送到...無處,因爲沒有訂閱者準備好它。它被無聲地拋棄了。用戶完成連接後,它可以接收MSG2沒有問題。

其原因是因爲PUB/SUB被設計用於信息快速陳舊的時候 - 比如報紙。如果你正在製作一份報紙,並且在第一天你沒有任何訂閱者,那麼當你真正收到訂閱者時,你不會在第二天持有同一版本的報紙 - 你會發送他們的新聞。你放棄它併爲你的新訂戶編寫另一個版本。

如果這不適合您的數據模型,那麼也許不同的套接字配對會對您更好。任何其他套接字類型將等待,直到它有一個對等體發送其消息。

+0

非常感謝Jason – Shad