2015-09-09 74 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