我正在使用C ++绑定ZMQ(cppzmq),我尝试使用.setsockopt()
方法设置TCP套接字的连接超时,如下所示:
int connectTimeout = 1000;
socket.setsockopt(ZMQ_CONNECT_TIMEOUT, &connectTimeout, sizeof(connectTimeout));
socket.connect(clientConfiguration.uri);
但是,在代码到达套接字上的实际.send()/.recv()
之前,我什么也看不到(异常抛出?)。为了确保套接字有机会抛出我在.connect()
和.send()
方法之间进行休眠。
根据文档.zmq_connect()
,只需输入READY
- 状态,而不与端点建立实际连接。那么问题是我何时以及如何体验连接超时?
答案 0 :(得分:3)
所以问题是何时以及如何我应该遇到连接超时?
好吧,实际上永远不会直接,因为这只是ZeroMQ Context()
-instances'内部 F 的API曝光设置inite- S tate- M achine modus operandi(这里.setsockopt()
设置所选的传输类API-OS-L3幕后的ISO-OSI-L3细节)。
嗯,还有一些其他 .setsockopt()
详细信息,(如果加上)可能会间接感知设置ZMQ_CONNECT_TIMEOUT
连接超时的影响。这里再次,仅通过修改的FSM行为间接地,即在某种程度上,.Context()
- 引擎实例将如何响应此类事件(所有纯粹内部,在API的幕后 - 这就是我们在方法上的原因使用API方法分离关注点,不是吗?)。
详情请参阅:
ZMQ_IMMEDIATE
,ZMQ_RECONNECT_IVL
,ZMQ_RECONNECT_IVL_MAX
的API详细信息
(API版本不断发展,请注意并非所有distributed-system代理都共享相同的ZeroMQ API版本。所以最好记住Zen-of-Zero并随意重用焦虑设计师的指令{{1 }。)。 如果不熟悉ZeroMQ仪器,人们可能会发现有用的这5秒钟阅读[ ZeroMQ hierarchy in less than a five seconds ]部分的主要概念差异,
(courtesy Martin Sústrik, co-father of both ZeroMQ + nanomsg.尊重!)