【问题标题】:How to send ACK message to client from server using NetMQ如何使用 NetMQ 从服务器向客户端发送 ACK 消息
【发布时间】:2017-03-31 00:23:27
【问题描述】:

我正在使用 NetMQ 将消息从许多客户端发送到接收消息并处理它们的服务器。如果我使用 pub/sub 模式,我可以(ab)使用订阅者套接字并将其用于服务器,客户端将成为发布者(相反的流程是不是吗?)。但是,我无法向客户发送确认消息。

如果我使用REQ/RESP 模式,我可以使用服务器的响应套接字,甚至可以发送一个可以被客户端接收的确认消息。但是,如果服务器错过了来自客户端的消息,我无法重新发送消息(在等待 timespan 之后),因为我收到了一个异常

Req.XSend - 无法发送另一个请求

-- 即使在断开客户端套接字并关闭它之后(它接缝服务器套接字会跟踪它)。

最后,根据文档,我不确定Dealer/Router 是否是正确使用的模式。由于我很确定自己陷入了一种非常常见的情况,是否有任何模式可以使用 NetMQ 实现这种情况?

【问题讨论】:

  • 只是一个建议,粗体/斜体有点讨厌。
  • @BradleyDotNET 我这样做只是为了使其更易于阅读,如果您认为这不是一个好主意,我感谢任何编辑。

标签: c# zeromq netmq


【解决方案1】:

您遇到了一个非常常见的问题,在 0MQ 用语中通常称为“可靠请求-回复”。

guide中描述了几种方法,第一种是“懒惰的海盗”。在其中,您使用所描述的 REQ/RESP 套接字对(尽管 REQ/ROUTER 也可以正常工作,并且可能对多个客户端更好)。解决方案是如果您的 ACK 超时并创建一个新的,则处理该套接字。

该指南确实指出,将 DEALER 换成 REQ 可以解决问题,但增加了必须自己跟踪信封。除非您出于其他原因需要在客户端进行异步发送/接收,否则我会遵循他们的建议并坚持使用 REQ/ROUTER。

此模式的示例实现可以在 GitHub 上找到:https://github.com/NetMQ/Samples/tree/master/src/Pirate%20Pattern

【讨论】:

  • 由于问题明确提到了 NetMQ,也许您可​​以使用这个 github.com/NetMQ/Samples/tree/master/src/Pirate%20Pattern 参考,它指向 Doron Somech 提出的实现,以使答案对未来的观众更加有用。
  • @mok 感谢您为我链接,我将其添加到答案中。
猜你喜欢
  • 2013-06-24
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 2021-11-26
  • 1970-01-01
相关资源
最近更新 更多