我在一个盒子上有服务器代码需要监听来自另一个盒子的状态,其中大约有10个芯片,其中嵌入了linux。 10个芯片都有自己的IP地址,每个芯片都会向服务器发送基本健康状态,这可能(可能)用它做一些事情。
我希望服务器只是被动地监听而不必发送响应。所以,这看起来像是zmq的pub / sub的工作。其中,10个芯片中的每一个都有自己的出版物,服务器会订阅每个芯片。
然而,服务器需要知道每个芯片绑定其出版物的众所周知的地址。但是,在现场,这些芯片可以交换或替换为不同的IP地址。
相反,让芯片知道服务器代码的ip adddress会更安全。
我想要一个pub / sub,其中接收器是众所周知的地址。或者,客户端(芯片)向服务器发送消息的请求/响应模式(请求),但服务器和芯片都不需要发送/接收响应。
现在,目前,单独的盒子上有两台服务器。因此,如果可能的话,我想要一个服务器和多个服务器的解决方案。
zmq可以吗?这会是什么样的模式?
感谢。
答案 0 :(得分:2)
是的,您可以按照您期望的方式完成此操作。只需绑定您的订阅者,然后与您的发布者连接到该订阅者。 ZMQ没有指定哪一端应该是"服务器"或更可靠的一端,哪个应该是"客户端"或更多的瞬态端,特别是出于这个原因,这是改变正常范式的一个很好的理由。
编辑以解决新的澄清问题 -
它应该适用于多个服务器。通常它会像下面那样工作(这种情况下的操作顺序只是为了确保没有消息丢失,如果PUB
套接字在SUB
准备好之前开始发送消息,这是可能的):
SUB
套接字并绑定地址:端口。SUB
套接字并绑定地址:端口。PUB
套接字并连接到[服务器1]地址:端口并连接到[服务器2]地址:端口。答案 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。