2015-04-02 45 views
3

ZeroMQs Pub/Sub模式使服务器可以轻松回复正确的客户端。然而,如何处理无法在两个步骤内解决的通信,即需要多个请求/应答对的协议,这并不那么明显。ZMQ:多个请求/回复对

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

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

+0

您需要为每个客户端实现一个状态机,以跟踪特定客户端所处的状态。 – 2015-04-02 21:19:23

回答

6

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

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

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

所有客户端将与除了他们在相同的模式,酒吧/替补服务器交互将全部点的单台服务器路由器插槽。

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

  • PART0 =连接的标识(它是哪个客户端随机数)
  • 第1部分空=帧
  • 第2部分的=消息ZMQ的数据。

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

同一性可以使用客户端访问的单个端口上之间进行区分。以相同的顺序重新包装消息,并在路由器套接字上(使用不同的数据帧)进行响应,会自动将其路由到发送消息的客户端。