ZMQ:多个请求/回复对

时间:2015-04-02 19:12:08

标签: zeromq

ZeroMQs发布/订阅模式使服务器可以轻松回复正确的客户端。然而,如何处理在两个步骤中无法解决的通信,即不需要多个请求/回复对的协议,则不太明显。

例如,考虑一种情况,客户端是一个工作人员,要求服务器提供特定类型的新工作,服务器回复工作的参数,然后客户端发送结果,服务器检查这些并回复他们是否正确。

显然,我不能只使用recv,send,recv,顺序发送并假设第一个和第二个recv来自同一个客户端。使用多个recv,发送对而不必处理来自其他客户端的消息的惯用方法是什么?

1 个答案:

答案 0 :(得分:8)

可以通过使用ZMQ_ROUTER套接字进行多个请求/回复对。我建议在客户端上使用ZMQ_REQ套接字进行双向通信。

如果您想让多个客户端访问单个服务器,您可以在服务器上使用路由器套接字并请求客户端上的套接字。

查看ZMQ指南中有关此模式的部分: http://zguide.zeromq.org/php:chapter3#The-Asynchronous-Client-Server-Pattern

所有客户端都将以与Pub / Subs相同的模式与服务器交互,除非它们都指向单个服务器路由器套接字。

另一方面,服务器将为客户端发送的每条消息接收三条消息。这些部分代表:

  • Part0 =连接的身份(客户端的随机数)
  • 第1部分=空框架
  • Part2 = ZMQ消息的数据。

参考: http://zguide.zeromq.org/php:chapter3#ROUTER-Broker-and-REQ-Workers

标识可用于区分在单个端口上访问的客户端。以相同的顺序重新打包消息并在路由器套接字上响应(使用不同的数据帧)将自动将其路由到发送消息的客户端。