ZMQ连接后睡眠?

时间:2014-05-02 16:40:08

标签: python sleep zeromq

在ROUTER-ROUTER设置中,在我将一个ROUTER插座连接到另一个ROUTER后,如果我在connect()到另一个ROUTER套接字后没有睡眠(比如0.1s左右),{{1通常不会经历(虽然有时会偶然)。

  1. 在发送之前,有没有办法确保我已连接?
  2. 为什么send()排队并在连接完成之前正确执行?
  3. 此外,这不是关于另一端的服务器是否还活着,而是在send()之后我send()太快,并且它以某种方式失败了。我不知道为什么。

1 个答案:

答案 0 :(得分:1)

  

在发送之前有没有办法确保我已连接?

不直接。建议的方法是使用Freelanch Protocol之类的东西并继续ping,直到收到响应。如果您停止接收对ping的响应,您应该认为自己已断开连接。

  

为什么send()在排队连接之前没有排队并正确执行?

在双方完成内部ZeroMQ握手之前,路由器无法向对等方发送消息。这就是它的工作方式,因为ROUTER需要其对等体的ID才能“路由”。显然睡眠时间为.1秒是开发系统上正确的时间。如果您需要能够连接然后在不睡觉或重试的情况下发送,那么您需要使用不同的模式。

例如,使用DEALER-ROUTER,DEALER客户端可以连接并立即发送,ZeroMQ将对消息进行排队,直到它被传递。这样做的原因是DEALER不需要对等体的ID - 因为它没有“路由”。当ROUTER服务器收到消息时,该握手已经完成,因此它可以立即响应而不会休眠。