ZeroMQ主从双向通信

ZeroMQ master slave two way communication

我想创建一个网络架构,其中主进程与一些从进程连接并以这种方式交换消息:

每个从站都应该能够向主站发送消息。主人应该能够向连接的奴隶的每个子集发送消息。

这些消息可能有答案,但如果没有使用 ZeroMQ 的专用方法,可以在更高级别处理。

这应该只使用一个端口。

使用普通套接字,我可以让 Master 绑定到一个端口,接受连接,为每个 slave 生成​​一个线程来处理传入的数据,并使用单个连接来联系单个 slave。

由于此架构将使用 message-based 通信,我认为 ZeroMQ 是实现它的合适工具,但浏览文档我找不到实现它的方法。

我打算在 python 中写这个,但问题应该与语言无关。

只使用一个端口我认为最好使用Dealer/Router :

  • Master 会是一个Router socket
  • Slave 是一个 Dealer socket
  • 当从站开始向主站发送“我在这里消息”时,主站应将身份(收到的第一帧)存储在已知从站列表中。

主机然后通过在消息中添加标识和空帧来发送给从机。 (您一次只能使用路由器套接字发送给一个客户端,但是编写一个函数来获取消息和从属身份列表并依次发送给每个客户端是微不足道的。)

slaves 的身份可以由您使用 Dealer 套接字上的 setsockopt 调用来设置,或者如果您不这样做,ZeroMQ 将自动分配唯一的身份。