有没有办法在zmq pub / sub上反转绑定?

时间:2014-08-05 17:12:14

标签: zeromq publish-subscribe

我在一个盒子上有服务器代码需要监听来自另一个盒子的状态,其中大约有10个芯片,其中嵌入了linux。 10个芯片都有自己的IP地址,每个芯片都会向服务器发送基本健康状态,这可能(可能)用它做一些事情。

我希望服务器只是被动地监听而不必发送响应。所以,这看起来像是zmq的pub / sub的工作。其中,10个芯片中的每一个都有自己的出版物,服务器会订阅每个芯片。

然而,服务器需要知道每个芯片绑定其出版物的众所周知的地址。但是,在现场,这些芯片可以交换或替换为不同的IP地址。

相反,让芯片知道服务器代码的ip adddress会更安全。

我想要一个pub / sub,其中接收器是众所周知的地址。或者,客户端(芯片)向服务器发送消息的请求/响应模式(请求),但服务器和芯片都不需要发送/接收响应。

现在,目前,单独的盒子上有两台服务器。因此,如果可能的话,我想要一个服务器和多个服务器的解决方案。

zmq可以吗?这会是什么样的模式?

感谢。

2 个答案:

答案 0 :(得分:2)

是的,您可以按照您期望的方式完成此操作。只需绑定您的订阅者,然后与您的发布者连接到该订阅者。 ZMQ没有指定哪一端应该是"服务器"或更可靠的一端,哪个应该是"客户端"或更多的瞬态端,特别是出于这个原因,这是改变正常范式的一个很好的理由。

编辑以解决新的澄清问题 -

它应该适用于多个服务器。通常它会像下面那样工作(这种情况下的操作顺序只是为了确保没有消息丢失,如果PUB套接字在SUB准备好之前开始发送消息,这是可能的):

  1. 旋转服务器1.创建SUB套接字并绑定地址:端口。
  2. 启动服务器2.创建SUB套接字并绑定地址:端口。
  3. 旋转芯片。该芯片将创建一个PUB套接字并连接到[服务器1]地址:端口并连接到[服务器2]地址:端口。
  4. 对其他9个芯片重复步骤(3)。

答案 1 :(得分:1)

.SUB模型

哦,是的,每个.PUB - lishing实体可能有很多.SUB - s, 所以有两个< serverNode > -s符合.PUB/.SUB - 原始正式沟通模式一个说话 - 很多人听

如上所述,每个< serverNode >结合

.bind( aFixServer{A|B}_ipAddress_portNumber )

允许每个.PUB - lishing< chipNode >到

.connect( anAprioriKnownServer{A|B}_bindingNode_ipAddress_portNumber )

并且< serverNode {A | B} >比.SUB - s接收来自他们的任何消息。

多服务器型号

如上所示,{ A | B }语法是免费的可扩展到{A|B|C|D|...},因此主要消息传递模型代表任何合理的多服务器扩展

Q.E.D。