我正在使用
PUB
/SUB
设计,我的问题是:
在另一个套接字已
.bind()
到某个端口后,我可以 .connect()
到某个端口吗?
或者我应该在另一个套接字尝试 .bind()
到同一地址之前 .connect()
吗?
换句话说:
.bind()
和 .connect()
的顺序重要吗?
(我认为这个问题不是特定于
PUB
/SUB
,而是与任何设计相关)。
ZMQ 背后的驱动原则是不担心您尝试连接的套接字是否已经存在。 这些是 ZMQ 试图从开发人员手中抽象出来的细节。 所以,不,
bind()
和 connect()
的顺序对于任何套接字类型都无关紧要。
如果您打算使用它进行大量工作,我建议您阅读zmq指南,相关部分在这里:
请记住,ZeroMQ 执行异步 I/O,即在后台执行。假设您有两个节点按以下顺序执行此操作:
- 订阅者连接到端点并接收和计数消息。
- 发布者绑定到端点并立即发送 1,000 条消息。
那么订阅者很可能不会收到任何东西。您会眨眼,检查您是否设置了正确的过滤器,然后重试,订阅者仍然不会收到任何内容。
...这里有一个重要的点需要注意,对于 PUB/SUB - 即使您首先与订阅者
connect()
,该连接也不会实际上发生,直到发布者bind()
编辑后,因此,如果您尝试在不等待订阅者完成连接的情况下向发布者发送消息,这些消息将永远不会发送给您的订阅者。