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

时间:2015-02-02 12:59:13

标签: zeromq zero

我正在尝试ZeroMQ,我想创建一个服务器:

REQ-管道-REPLY

我希望按顺序接收数据查询请求,将其推送到inproc管道以并行化数据查询,然后接收器将数据合并回来。在接收器将数据合并在一起之后,接收器将合并的数据作为回复发送回请求。

这可能吗?怎么样?我不确定推/拉是否会保留REP套接字的客户端地址以便发回。

1 个答案:

答案 0 :(得分:1)

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

  

这可能吗?

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

  

它看起来怎么样?

(在C中)

您可能想要做的是从外部服务器套接字上的ZMQ_REP套接字切换到ZMQ_ROUTER套接字。路由器/经销商套接字具有标识,允许您在管道中拥有多个请求,并且仍然可以正确响应每个请求。

异步客户端/服务器模式: http://zguide.zeromq.org/php:chapter3#The-Asynchronous-Client-Server-Pattern

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

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

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

  

我不确定推/拉是否会保留客户端的地址   REP socket要发回。

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