首页 > 解决方案 > ZMQ 套接字连接超时

问题描述

我正在为 ZMQ (cppzmq) 使用 C++ 绑定,并且我正在尝试使用.setsockopt()如下 - 方法设置 TCP 套接字的连接超时:

int connectTimeout = 1000;
socket.setsockopt(ZMQ_CONNECT_TIMEOUT, &connectTimeout, sizeof(connectTimeout));
socket.connect(clientConfiguration.uri);

.send()/.recv()但是,在代码到达套接字上的实际值之前,我没有看到任何事情(抛出异常?) 。只是为了确保套接字有机会抛出我在.connect().send()方法之间设置了一个睡眠。

根据文档.zmq_connect(),只需进入READY-state 而不与端点建立实际连接。所以问题是我应该何时以及如何体验连接超时?

标签: c++zeromq

解决方案


所以问题是我应该何时以及如何体验连接超时?

什么时候 ?

好吧,实际上从不直接,因为这只是 ZeroMQ-instances 的内部有限状态机操作方式的 API 公开设置Context()这里设置了选定的传输类背后的 API 幕 ISO - OSI- L3 详细信息)。.setsockopt()

如何(如果有的话)

好吧,还有一些其他.setsockopt()细节(如果戴上)可能会间接感受到设置ZMQ_CONNECT_TIMEOUT连接超时的影响。再次,只是间接地,通过修改后的 FSM 行为,即在某种程度上,.Context()-engine 实例将如何碰巧响应此类事件(完全在内部,在 API 的幕后 - 这就是我们在方法上使用 API 方法的原因关注点分离,不是吗?)。

有关更多详细信息,请参阅:

  • 有关的API 详细信息ZMQ_IMMEDIATE
  • 有关的API 详细信息ZMQ_RECONNECT_IVL
  • 关于 API 的详细信息ZMQ_RECONNECT_IVL_MAX
    (API 版本不断发展,请注意并非所有代理都共享相同的 ZeroMQ API 版本。所以最好记住 Zen-of-Zero 并随时重用焦虑设计者的指令#ASSUME NOTHING。)

预告片奖励:

如果不熟悉 ZeroMQ 工具,可能会发现这 5 秒的内容对 [ ZeroMQ 层次结构在不到 5 秒的时间内] 部分的主要概念差异很有用,

在此处输入图像描述

由 ZeroMQ + nanomsg 的共同之父 Martin Sústrik 提供。尊重!)


推荐阅读