在研究ZeroMQ时,PUSH
和PULL
类型的套接字对我来说没有多大意义。据我所知,PUSH
套接字应始终.connect()
,因为它只发送,PULL
套接字应该.bind()
,因为它只接收数据。
通常的例子显示如下:
.bind()
没有,
.connect()
两者。 如何我们决定PUSH / PULL套接字应 .bind()
还是 .connect()
-ed?
答案 0 :(得分:1)
通常,系统中更稳定的部分(“服务器”)将绑定,并且更多瞬态部分(多个“客户端”)将连接。
大多数ZeroMQ套接字可以绑定(充当服务器)或连接(充当客户端)。您可以先连接并稍后绑定。客户端将继续尝试连接,直到服务器启动。这是ZeroMQ的一个非常好的功能。
如果是PUSH / PULL,它既可以绑定也可以连接。对于PUB / SUB,ROUTER / DEALER等也是如此。
在图中,您可以在运行时添加或删除中间节点,而无需重新配置或重新启动节点A或C.这可能是他们选择绑定A和C的原因。
答案 1 :(得分:0)
为什么? (。bind()而不是.connect())
因为只是 Node-A 没有任何知识,有多少 Node-B 工作人员类型 PULL
- PUSH
数据处理器将在近期或远期出现/消失,它们知道各自的地址越少(因此它无法猜测何时/何地.connect()
到,从它自己的一方)。
如何? (决定是否应该.bind()或.connect() - ed)
在静态确定性系统设计中,人们可以自由选择。 ZeroMQ框架完成剩下的工作。聪明,不是吗?
在动态非确定性系统设计中,在这些节点上 .bind()
,必须保证“可见性”(地址,连通性),其余的凡人应该 { {1}} 对于那些在严酷现实的激烈风暴中仍然可见的“灯塔”:o)