【问题标题】:ZMQ socket connection timeoutZMQ 套接字连接超时
【发布时间】:2018-11-26 11:52:06
【问题描述】:

我正在为 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-状态而不实际连接到端点。所以问题是我应该何时以及如何体验连接超时?

【问题讨论】:

  • 你的交通工具是什么?
  • TCP,问题已更新
  • 我没有看到文档中提到 zmq_connect 是异步的。你介意指点我吗?
  • api.zeromq.org/3-2:zmq-connect - “对于大多数传输和套接字类型,连接不会立即执行,而是根据 ØMQ 的需要执行。因此,成功调用 zmq_connect() 并不意味着连接已经或可能实际上是成立。”
  • @user3666197,有什么不同吗? zmq_connect 在 api.zeromq.org/4-2:zmq-connect 的行为是否有所不同?

标签: c++ zeromq


【解决方案1】:

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

什么时候?

好吧,实际上从不直接,因为这只是 ZeroMQ Context()-instances 内部 Finite- 的 API 公开设置State-Mahine 作案方式(这里.setsockopt() 设置所选的传输类背后的API 幕后ISO-OSI-L3 详细信息)。

如何(如果有的话) ?

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

更多详情参考:

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

预告片奖励:

如果不熟悉 ZeroMQ 工具,在这 5 秒内阅读 [ ZeroMQ hierarchy in less than a five seconds ] 部分中的主要概念差异可能会有所帮助,

(courtesy Martin Sústrik, co-father of both ZeroMQ + nanomsg.尊重!)

【讨论】:

  • 嗯...听起来它并没有解决我想知道连接问题的不可抗拒的愿望的问题 :) 我是否应该追求其他方向,例如 zmq_socket_monitor 以获得连接问题等的通知?
  • " 不可抗拒的欲望 " ???凉爽的。可行的。严重地。去完成它,只需 fork + re-factor the core-lib,你就完成了,伙计。其他都无关紧要 :o) 类似的动机也用于 nanomsg 更小的 ZeroMQ 姐妹,API 最近被扩展为调用 @ 987654339@,因此这似乎是一个直接的代理解决方案,如果您有一个设计方面的选项可以向前迈进,为您的分布式系统使用 nanomsg 而不是 ZeroMQ -设计。 >>> nanomsg.org/v1.1.4/nn_get_statistic.html
  • 好主意,请稍等,我会以正确的方式重写 zmq。
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2023-03-23
  • 2012-11-17
  • 2011-02-05
  • 2020-06-02
相关资源
最近更新 更多