ZMQ:多个 request/reply-pairs

ZMQ: Multiple request/reply-pairs

ZeroMQs Pub/Sub 模式使服务器很容易回复正确的客户端。然而,如何处理无法在两步内解决的通信不太明显,即需要多个 request/reply 对的协议。

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

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

多个 Request/Reply 对可以通过使用 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

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