是什么导致 REQ 套接字不接收来自 REP 的回复?

What causes the REQ socket to NOT recv replies from REP?

我为我的客户端模块实现了 lazy pirate pattern,它非常适合重试请求。但是问题来了。

  1. REQ 客户端向REP 服务器发送消息。 [确定]
  2. REP 服务器解释消息。 [确定]
  3. REP 服务器执行一些操作,并准备响应。 [确定]
  4. REP 服务器发回响应。 [确定]
  5. REQ 客户端轮询消息但直到超时才收到任何消息。 [不正常]
  6. REQ 客户端重启套接字,并再次尝试发送请求。 [不正常]
  7. REP 服务器再次执行操作。 [问题]
  8. 这次REQ Client成功收到响应。 [确定]

这就是问题所在,我执行了两次本应只执行一次的操作。我认为这是我能解释的最好方式。

在某些情况下,客户端可以同时向服务器发送请求,因为我在线程上有一个协程 运行,与主线程分开,这两个线程都具有向服务器发送请求的功能。这可能是它的原因吗?

我也有多个这样的客户端连接到服务器,这可能是问题所在吗?

谢谢!

Q1 : "Could this ... coroutine based co-existence ... be the cause of it?"

是的,主要是如果协程使用 REQ-archetype 的相同实例。

Q2 : "... could this ... multiple of these clients connected to the server ... be the problem?"

不,考虑到每个客户端都在其自己的 REQ-原型实例上运行,连接到 REP-(服务器)端,应该没有理由即将出现块(有关详细信息,请阅读有关 REQ/REP 主要确定性的更多信息,以落入 un-salvagable 相互 dead-lock,你唯一不知道的是它什么时候会发生,但我们都可以确定它会发生 )


如果需要一个原子的、singleton-alike 唯一的执行(并且如果服务器实现允许的话),可以记录每个 REQ 的任务- {UUID},防止double-shots到同一个task-target。

如果没有问题的实际 MCVE/MWE-representation(.poll-ing 循环逻辑/超时/remedy-strategies ).