好消息是纯粹的
pyzmq
场景很好,
硬件或操作系统相关问题似乎已从故障列表中排除。
该死的绑定
第一件事是,
一些高层实业家为了摆脱原生API而取消了用户端选项。
CZMQ这样做是因为它假设:
每一个
SUB
.connect()
,不离开反向
.bind()/.connect()
之前
设置了套接字连接,这使得分布式系统实现的“高级”绑定更加麻烦。
接下来是奇怪的事情,代码在一个盒子上运行良好,而在另一个盒子上运行不好。
我担心的是用户方面的责任
LINGER
归零+
.close()
任何此类创建
附属的
套接字(如果没有适当的异常处理,则不需要发生)
zmq.Context()
.term()
-已取消。这可能会挂起孤儿,导致实际资源(仍)被占用,从而导致
errno
代码11,
Resource temporarily unavailable.
may also like this post.
bool ZmqSocketWrapper::connectSubscriber(string address)
{ b_RetFLAG = true;
m_address = address;
m_pSocket = zsock_new_sub(address.c_str(), "");
int errorCode = zmq_errno();
if (errorCode != 0)
{
printf(zmq_strerror(errorCode));
b_RetFLAG = false;
}
// -------------------------------------------------------------
zsock_destroy( &m_pSocket ); // USER's MANDATORY DUTY PRE-RET
// -------------------------------------------------------------
return b_RetFLAG;
}
使用本机API,其中您的代码完全控制阶段。