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

ZeroMQ - How to get rid of setTimeout in zeromq zmq implementation of Publishing messages?

例如,在发布我们使用的任何消息时 setTimeout()

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

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

我正在使用 NodeJS ZMQ npm 模块。

有没有其他方法可以在不添加 setTimeout() 函数的情况下实现 PUB/SUB 模式?

谢谢

我强烈建议您阅读 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 设计用于信息快速过时时使用 - 就像报纸一样。如果你正在制作一份报纸,并且在第一天你没有任何订阅者,那么当你真正获得一些订阅者时,你不会在第二天持有相同版本的报纸 - 你会发送他们是旧闻。您废弃它并为您的新订阅者编写另一个版本。

如果这不适合您的数据模型,那么不同的套接字配对可能更适合您。任何其他套接字类型将等待,直到它有一个对等方发送消息。