【问题标题】:ZeroMQ - How to get rid of setTimeout in zeromq zmq implementation of Publishing messages?ZeroMQ - 如何在发布消息的 zeromq zmq 实现中摆脱 setTimeout?
【发布时间】:2015-09-09 23:02:08
【问题描述】:

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

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

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

我正在使用 NodeJS ZMQ npm 模块。

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

谢谢

【问题讨论】:

    标签: node.js zeromq


    【解决方案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 旨在用于信息很快过时的情况(例如报纸)。如果您正在制作一份报纸,并且在第一天您没有任何订阅者,那么当您实际获得一些订阅者时,您将不会在第二天持有相同版本的报纸 - 您将发送他们是旧闻。您将其废弃并为新订阅者编写另一个版本。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2017-05-06
      相关资源
      最近更新 更多