例如,在发布我们正在使用的任何邮件setTimeout()
我尝试删除超时,但它不会发布任何消息。
setTimeout(function () {
var t = pub.send(mes + ' ' + stringObject, 0);
}, 1000);
我正在使用NodeJS ZMQ npm模块。
在没有添加PUB
函数的情况下,是否还有SUB
/ setTimeout()
模式的其他方法?
由于
答案 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设计用于在信息快速陈旧时使用 - 就像报纸一样。如果您正在制作报纸,并且在第一天您没有任何订阅者,那么当您实际获得某些订阅者时,您将不会在第二天持有相同版本的报纸 - 你发送旧消息。您将其废弃并为新订阅者编写另一个版本。
如果这不适合您的数据模型,那么可能不同的套接字配对对您来说效果更好。任何其他套接字类型都会等到它有一个对等体发送它的消息。