我在一个盒子上有服务器代码,需要监听来自另一个盒子的状态信息,里面有大约10片嵌入linux的芯片。这10个芯片都有自己的ip地址,每个芯片都会向服务器发送基本的健康状态,服务器可以(可能)对其做一些事情。
我希望服务器只是被动地倾听,而不必发送回复。因此,这看起来像是zmq的pub/sub的工作。其中,10个芯片中的每一个都有自己的发布,服务器将订阅每一个。
但是,服务器需要知道每个芯片绑定其发布的众所周知的地址。但是,在现场,这些芯片可以用不同的ip地址交换或替换。
相反,让芯片知道服务器代码的ip地址更安全。
我想要一个酒吧/分店,那里的收信人是众所周知的地址。或者,一种请求/响应模式,其中客户端(芯片)向服务器(请求)发送消息,但服务器和芯片都不需要发送/接收响应。
现在,在单独的机器上有两台服务器。因此,如果可能的话,我希望为一台服务器和多台服务器提供解决方案。
这在zmq中是可能的吗?那会是什么模式呢?
谢谢。
发布于 2014-08-05 17:25:01
是的,你可以按照你期望的方式来做这件事。只需绑定订阅服务器,然后与发布服务器连接到该订阅服务器。ZMQ没有指定哪个端应该是“服务器”或更可靠的端,哪个应该是“客户端”,或者是更短暂的端,特别是因为这个原因,这是切换正常范式的一个很好的理由。
编辑以解决新的澄清--
它应该可以在多台服务器上正常工作。通常,它的工作方式如下(本例中的操作顺序只是为了确保没有消息丢失,如果PUB
套接字在SUB
准备就绪之前就开始发送消息,这是可能的):
SUB
套接字并绑定到地址:端口。SUB
套接字并绑定到地址:端口。PUB
套接字,并连接到服务器1地址:端口和服务器2地址:端口。发布于 2014-08-05 18:07:24
对偶.SUB
模型
哦,是的,每个.PUB
-lishing实体可能有许多.SUB
-s侦听,因此有两个-s满足.PUB/.SUB
-primitive 的正式通信模式(一个说话-多听)
如前所述,您的每个绑定
.bind( aFixServer{A|B}_ipAddress_portNumber )
因此,允许每个.PUB
-lishing
.connect( anAprioriKnownServer{A|B}_bindingNode_ipAddress_portNumber )
并且均大于.SUB
-s,以接收它们的任何消息。
多服务器模型
如上文所示,{A|B}
语法可自由扩展到{A|B|C|D|...}
,因此主消息传递模型将支持任何合理的多服务器扩展。
Q.E.D.
https://stackoverflow.com/questions/25144604
复制相似问题