我正在使用NetMQ将消息从许多客户端发送到接收消息并处理它们的服务器。如果我使用 pub / sub 模式,我可以(ab)使用订阅者套接字并将其用于服务器,客户端将是发布者(相反的流程,不是是吗?)但是,我无法向客户发送确认消息。
如果我使用REQ/RESP
模式,我可以使用服务器的响应套接字,甚至发送可以由客户端接收的确认消息。但是,如果服务器错过了来自客户端的消息,我无法重新发送消息(在等待timespan
之后),因为我收到异常
Req.XSend - 无法发送其他请求
- 即使在断开客户端套接字并关闭它之后(它接缝服务器套接字也会跟踪它)。
最后,根据文档,我不确定Dealer/Router
是否是正确的模式。由于我很确定我遇到了一个非常常见的情况,是否有使用NetMQ实现此方案的模式?
答案 0 :(得分:2)
你陷入了一个非常普遍的问题,通常在0MQ的说法中被称为“可靠的请求 - 回复”。
guide中描述了几种方法,第一种是“懒惰的海盗”。在其中你使用REQ / RESP套接字对(虽然REQ / ROUTER也可以,但对于多个客户端可能更好)。解决方案是在ACK超时并且创建新套接字时处理套接字。
该指南确实指出,交换REQ的经销商可以解决问题,但需要自己跟踪信封。除非您出于其他原因需要在客户端进行异步发送/接收,否则我会遵循他们的建议并坚持使用REQ / ROUTER。
可以在GitHub上找到此模式的示例实现:https://github.com/NetMQ/Samples/tree/master/src/Pirate%20Pattern