zmq错误代码156384763的原因

Reason for zmq error code 156384763

我正在使用 zmq req/rep 模式通信。实现非常简单,req 发送一些数据并等待 recv。代表接收数据、处理并回复。

//REQ
zmq_connect
zmq_send
zmq_recv //blocking
zmq_close

//REP
zmq_bind
while(true) {
  while(data_received) {
    //miscellaneous process
    zmq_recv //non-blocking
      Print zmq_error_no if zmq_recv fails
  }
  zmq_send
}

在 REP 端,在 zmq_recv 超时期间将打印 zmq_error_no 11。但有时我收到错误号 156384763。谁能告诉我该错误的含义?

这是本机 ZeroMQ 错误 EFSM:

The zmq_send() operation cannot be performed on this socket at the moment due to the socket not being in the appropriate state. This error may occur with socket types that switch between several states, such as ZMQ_REP.

来源:zmq_send, zmq.h

这是此 EFSM 错误的另一个受害者,当从 REP 套接字接收时出现。

对我来说,直接原因是没有回答客户提出的一些要求。 请记住,消息传递模式严格 要求您发送回复 ! 如果你不这样做,那么服务器就会变得混乱并停止工作。

那么,这在实践中是如何发生的呢?

好吧,您可能会发现自己正在将遗留协议移植到 ZeroMQ(就像我一样)。原作者根本懒得回复某些请求。 因此,一旦您发出这样的请求,服务器就会崩溃。

或者假设您的代码在处理该特定有问题的请求时发生了异常。然后我们可能会不经意地跳过发送回复消息的代码!