我正在使用 ZMQ (cppzmq) 的 C++ 绑定,并且尝试使用以下命令设置 TCP 套接字的连接超时.setsockopt()
-这样的方法:
int connectTimeout = 1000;
socket.setsockopt(ZMQ_CONNECT_TIMEOUT, &connectTimeout, sizeof(connectTimeout));
socket.connect(clientConfiguration.uri);
但是,在代码达到实际值之前,我没有看到任何事情发生(抛出异常?).send()/.recv()
在插座上。只是为了确保套接字有机会抛出,我在两者之间进行了睡眠.connect()
and .send()
方法。
根据文档.zmq_connect()
只需输入一个READY
- 未与端点建立实际连接的状态。那么问题是我应该何时以及如何经历连接超时?
所以问题是何时以及如何我应该经历连接超时吗?
When ?
实际上从不直接因为这只是 ZeroMQ 的 API 公开设置Context()
-实例的内部Finite-State-M机器操作方式(这里是.setsockopt()
设置选定的 API 幕后传输类 ISO-OSI-L3 详细信息)。
How( if at all ) ?
嗯,还有一些其他的.setsockopt()
细节,(如果戴上)可能会间接感受到该设置的影响ZMQ_CONNECT_TIMEOUT
连接超时。在这里,只是间接地,通过修改的 FSM 行为,即在某种程度上,如何.Context()
-engine 实例将碰巧响应此类事件(所有这些都纯粹在内部,在 API 幕后 - 这就是为什么我们在方法上使用 API 方法来分离关注点,不是吗?)。
欲了解更多详情,请参考:
- API 详细信息
ZMQ_IMMEDIATE
,
- API 详细信息
ZMQ_RECONNECT_IVL
,
- API details about
ZMQ_RECONNECT_IVL_MAX
.
( API versions evolve, be aware that not all distributed-system /questions/tagged/distributed-system agents share the same ZeroMQ API version. So best remember the Zen-of-Zero and feel free to re-use the anxient designers' directive #ASSUME NOTHING
. )
预告片奖励:
如果不熟悉 ZeroMQ 工具,可能会发现用 5 秒的时间了解 [ZeroMQ 层次结构在不到五秒的时间内完成 https://stackoverflow.com/a/46620571] 部分,
( courtesy Martin Sústrik, co-father of both ZeroMQ + nanomsg. http://250bpm.com/blog:25 Respect! )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)