PUB / SUB可以在.bind()之前使用.connect()吗?

时间:2015-10-21 08:56:41

标签: zeromq netmq nanomsg

我使用 PUB / SUB 设计,我的问题是:

我可以 .bind() 到另一个套接字 .connect() 之后的端口, 或者我应该.bind()在另一个套接字尝试.connect()到同一地址之前?

换句话说:

.bind().connect()的顺序是否重要?

(我认为此问题并非针对PUB / SUB,而是与任何设计相关。)

2 个答案:

答案 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()

http://zguide.zeromq.org/page:all#Unicast-Transports