我使用 PUB
/ SUB
设计,我的问题是:
我可以 .bind()
到另一个套接字 .connect()
之后的端口,
或者我应该.bind()
在另一个套接字尝试.connect()
到同一地址之前?
换句话说:
.bind()
和.connect()
的顺序是否重要?
(我认为此问题并非针对PUB
/ SUB
,而是与任何设计相关。)
答案 0 :(得分:4)
ZMQ背后的驱动原则并不是担心您尝试连接的插座是否已经存在。这些是ZMQ试图从开发人员那里抽象出来的细节。所以,不,bind()
和connect()
的顺序对任何套接字类型都无关紧要。
如果您计划对其进行大量工作,我建议您阅读the zmq guide,相关部分here:
请记住,ZeroMQ执行异步I / O,即在后台执行。假设您有两个节点按此顺序执行此操作:
- 订阅者连接到端点并接收和计算消息。
- Publisher绑定到端点并立即发送1,000条消息。
然后订阅者很可能不会收到任何内容。您将闪烁,检查您是否设置了正确的过滤器并重试,订阅者仍然无法收到任何内容。
...这里有一点需要注意,对于PUB / SUB - 即使您connect()
首先与您的订阅者相关,该连接实际上 >发布者之后 发生,所以如果您尝试向发布者发送消息而不等待订阅者完成其连接,那么这些消息将永远不会发送给您订户。
答案 1 :(得分:3)
这取决于单播传输,tcp://
和ipc://
传输类已断开连接,因此.bind()
和.connect()
的顺序无关紧要。
但已连接inproc://
传输类,因此首先需要.bind()
,然后.connect()
。