ZMQ套接字连接超时

kre*_*ieg 7 c++ zeromq

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

int connectTimeout = 1000;
socket.setsockopt(ZMQ_CONNECT_TIMEOUT, &connectTimeout, sizeof(connectTimeout));
socket.connect(clientConfiguration.uri);
Run Code Online (Sandbox Code Playgroud)

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

根据文档,.zmq_connect()只是进入READY- 状态,而不与端点建立实际连接。那么问题是我应该何时以及如何经历连接超时?

use*_*197 6

\n

那么问题是我应该何时以及如何经历连接超时?

\n
\n\n

什么时候 ?

\n\n

好吧,实际上从来没有直接这样做过Context(),因为这只是 ZeroMQ实例的内部F initeState机器操作方式的 API 公开设置(这里设置了 API 幕后 ISO- OSI选定的传输类) -L3 详细信息)。.setsockopt()

\n\n

怎么样(如果有的话)?

\n\n

嗯,还有一些其他.setsockopt()细节,(如果穿上的话)可能会间接感受到设置的连接超时的影响ZMQ_CONNECT_TIMEOUT。在这里,只是间接地,通过修改后的 FSM 行为,即在某种程度上,.Context()引擎实例将如何响应此类事件(全部纯粹在内部,在 API 幕后 - 这就是为什么我们在方法上使用用于分离关注点的 API 方法,不是吗?)。

\n\n

欲了解更多详情,请参考:

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

预告片奖励:

\n\n
\n

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

\n
\n\n

在此输入图像描述

\n\n

(Martin S\xc3\xbastrik 提供,ZeroMQ + nanomsg 的联合创始人。尊重!)

\n

  • 好主意,请稍等一下,我会以正确的方式重写 zmq。 (8认同)