目录
背景
在调试防爆无轨无人矿车时,出现消息代理不能很好转发,于是在公司通过代理的方式模拟跨机互联收发数据报文,当时记录的目的是若更新固件后若不能收发数据,智驾的代码那块可参考该文章进行修改相应ip和端口
前景知识
ZeroMQ(ZMQ)是一个强大的消息传递库,它提供了许多灵活的消息传递模式,包括发布-订阅、请求-应答、推送-接收等。在 ZeroMQ 中,您可以通过使用不同的套接字类型和模式来构建消息代理转发机制。
下面是一个简单的示例,演示了如何使用 ZeroMQ 来实现一个消息代理转发机制:
1.启动一个代理服务器
代理服务器会接收来自多个发布者的消息,并将这些消息发送给订阅者。
import zmq
context = zmq.Context()
# 代理服务器绑定到tcp://*:5555
frontend = context.socket(zmq.SUB)
frontend.bind("tcp://*:5555")
# 代理服务器发送到tcp://*:5556
backend = context.socket(zmq.PUB)
backend.bind("tcp://*:5556")
zmq.proxy(frontend, backend)
2.发布者
发布者将消息发送到代理服务器
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.connect("tcp://localhost:5555")
while True:
msg = input("Enter message: ")
socket.send_string(msg)
3.订阅者
订阅者从代理服务器接收消息。
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556")
while True:
msg = socket.recv_string()
print("Received message: ", msg)
在这个示例中,代理服务器充当消息的中转站,让发布者和订阅者之间进行解耦。发布者将消息发送到代理服务器,而订阅者从代理服务器接收消息,实现了消息的转发机制。
大家可以根据具体需求和场景,调整消息传递模式、套接字类型以及网络配置,来构建适合您需求的消息代理转发机制。
实际应用
本次采用2块交互版子进行跨机互联模拟,一块板子负责模拟智驾发数据,ip为192.168.1.137,以下简称智驾137;另一块板子负责接收来自模拟智驾板子的数据,ip为192.168.1.131;以下简称交互箱131。目前均已关闭了守护进程和hmi_info。
1.模拟智驾收来自交互箱131的按钮json数据
其中Test程序写法
其中,交互箱131写法:
结果:智驾这块收到了来自按钮的数据。
2.模拟交互箱131收来自智驾137的cjson数据
其中,模拟智驾发布显示json数据的智驾137代码:
其中,交互箱131zmq订阅接收智驾的代码编写:
结果:交互箱131收到了来自智驾137的数据:
最终显示效果如下: