我正在使用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.谁能告诉那个错误的含义?
答案 0 :(得分:3)
这是本机ZeroMQ错误EFSM:
由于套接字未处于适当的状态,此时无法在此套接字上执行zmq_send()操作。在多个状态之间切换的套接字类型可能会发生此错误,例如ZMQ_REP。
答案 1 :(得分:1)
这里是此EFSM
错误的另一个受害者,该错误在从REP
套接字接收时出现。
对我来说,直接原因是没有回答客户提出的一些要求。 请记住,消息传递模式严格要求您发送回复! 如果您不这样做,则服务器会变得混乱,并只能停止工作。
那么,这在实践中如何发生?
好吧,您可能发现自己正在将旧版协议移植到ZeroMQ(像我一样)。原始作者根本不想打扰某些请求的地方。 因此,一旦您遇到这样的请求,服务器就会中断。
或者假设在处理该特定问题请求时代码中发生了异常。然后,我们可能会无意间跳过我们的发送答复消息代码!