C++接入ZeroMQ核心是建上下文、选套接字类型、按模式收发数据;需创建zmq::context_t并复用,依场景选ZMQ_REQ/REP或ZMQ_PUB/SUB,注意收发顺序与资源释放。
用C++接入ZeroMQ做消息通信,核心就三件事:建上下文、选套接字类型、按模式收发数据。它不依赖中间服务,也不需要手动管理TCP连接,写起来比原生Socket轻量得多。
每个程序先创建一个zmq::context_t对象,通常传1表示启用1个I/O线程:
ZMQ_REQ,服务端对应ZMQ_REP;广播场景用ZMQ_PUB和ZMQ_SUB
bind("tcp://*:5555")监听;客户端调connect("tcp://localhost:5555")连接这是最直观的“发请求→等回复”模式,适合API调用、远程命令执行等场景:
send()再r
ecv(),顺序不能颠倒;服务端则必须先recv()再send()
ZMQ_DONTWAIT改为非阻塞)zmq::message_t封装,支持二进制数据,比如memcpy(msg.data(), &my_struct, sizeof(my_struct))
适合行情推送、事件通知、日志分发等不需要应答的场景:
ZMQ_PUB绑定地址,调send()发消息;订阅者用ZMQ_SUB连接后,先调setsockopt(ZMQ_SUBSCRIBE, ...)设置主题(空字符串表示接收所有)"stock.AAPL",订"stock."就能匹配ZeroMQ不自动释放底层句柄,容易内存泄漏:
socket.close()
context.close()或context.destroy()
基本上就这些。模式选对、上下文建稳、收发顺序守牢,ZMQ在C++里跑得又快又稳。