如何在 ZeroMQ 中将管道添加到 REQ-REP?

How do I add a pipeline to a REQ-REP in ZeroMQ?

我正在试验 ZeroMQ,我想在其中创建一个服务器:

REQ-PIPELINE-REPLY

我想按顺序接收数据查询请求,将其推送到进程内管道以并行化数据查询,然后接收器将数据合并回来。 sink合并数据后,sink将合并后的数据作为reply返回给request。

这可能吗?它看起来如何?我不确定 push/pull 是否会保留 REP 套接字发送回的客户端地址。

假设每个客户端在任何时候都只有一个请求。

Is this possible?

是的,但是有不同的套接字类型。

How would it look?

(在 C 中)

您可能想做的是从外部服务器套接字上的 ZMQ_REP 套接字转移到 ZMQ_ROUTER 套接字。 Router/Dealer 套接字具有允许您在管道中有多个请求并且仍然正确响应每个请求的身份。

异步Client/Server模式: http://zguide.zeromq.org/php:chapter3#The-Asynchronous-Client-Server-Pattern

唯一的问题是您需要管理 ZMQ 消息的多个部分。第一部分是身份。第二个为空。三是数据。只要您按照与请求相同的顺序进行回复,身份就会将您的响应数据引导至正确的客户端。我将我的请求包装在一个结构中:

struct msg {
   zmq_msg * identity;
   zmq_msg * nullMsg;
   zmq_msg * data;
};

确保在接收消息时使用zmq_msg_more,并在正确发送时设置更多标志。

I am not sure if the push/pull will preserve client's address for the REP socket to send back to.

你是对的。推拉模式不允许在多个客户端之间指定 return 地址。