ZeroMQ - 如何摆脱发布消息的zeromq zmq实现中的setTimeout?

时间:2015-09-09 06:41:37

标签: node.js zeromq

例如,在发布我们正在使用的任何邮件setTimeout()

我尝试删除超时,但它不会发布任何消息。

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

我正在使用NodeJS ZMQ npm模块。

在没有添加PUB函数的情况下,是否还有SUB / setTimeout()模式的其他方法?

由于

1 个答案:

答案 0 :(得分:1)

我强烈建议您阅读the guide,它会与其他许多人一起回答这个问题。

您需要添加setTimeout()的原因是因为PUB套接字会在 it 准备就绪时发送消息,它不会等到订阅者准备好了。因此,当您省略超时时发生的事情如下所示:

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

...您的发布商可以bind() 立即,它不需要从任何网络资源发出请求。您的订阅者必须出去并建立与发布者的连接,这需要时间。因此,发布者已做好准备,并将MSG1发送到...无处,因为没有订阅者为此做好准备。它静静地掉了下来。订阅者完成连接后,可以毫无问题地收到MSG2

之所以这样,是因为PUB / SUB设计用于在信息快速陈旧时使用 - 就像报纸一样。如果您正在制作报纸,并且在第一天您没有任何订阅者,那么当您实际获得某些订阅者时,您将不会在第二天持有相同版本的报纸 - 你发送旧消息。您将其废弃并为新订阅者编写另一个版本。

如果这不适合您的数据模型,那么可能不同的套接字配对对您来说效果更好。任何其他套接字类型都会等到它有一个对等体发送它的消息。