ZMQ:多个请求/回复对

DaV*_*nci 5 zeromq

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

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

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

Mat*_*son 9

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

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

退房ZMQ指南的部分对这种模式: http://zguide.zeromq.org/php:chapter3#The-Asynchronous-Client-Server-Pattern

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

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

  • Part0 =连接的身份(客户端的随机数)
  • Part1 =空框架
  • Part2 = ZMQ消息的数据.

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

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