如何使用NetMQ从服务器向客户端发送ACK消息

时间:2017-03-31 00:23:27

标签: c# zeromq netmq

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

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

  

Req.XSend - 无法发送其他请求

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

最后,根据文档,我不确定Dealer/Router是否是正确的模式。由于我很确定我遇到了一个非常常见的情况,是否有使用NetMQ实现此方案的模式?

1 个答案:

答案 0 :(得分:2)

你陷入了一个非常普遍的问题,通常在0MQ的说法中被称为“可靠的请求 - 回复”。

guide中描述了几种方法,第一种是“懒惰的海盗”。在其中你使用REQ / RESP套接字对(虽然REQ / ROUTER也可以,但对于多个客户端可能更好)。解决方案是在ACK超时并且创建新套接字时处理套接字。

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

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