基于cppzmq和MsgPack封装的PublisherSubscriber-发布订阅模式
- IT业界
- 2025-08-24 18:27:02

特点:
类似ROS的publisher和subscriber, 允许设置发布和订阅的 topic nameSubscriber支持设置回调函数,在订阅到数据的时候触发回调函数; 通过C++模板template配合MsgPack,允许发布和订阅任意类型的数据,包括int、std::string以及自定义的结构体;支持全部ZMQ协议:tcp, ipc, inproc和epgm。 单个进程内可使用inproc,基于内存通信,速度快单机多进程间通讯,可使用ipctcp最通用,适用于各种场景调用例子:
#include "zmq_utils/publisher.hpp" #include "zmq_utils/subscriber.hpp" void intCallback(int&& data) { std::cout << "Received integer: " << data << std::endl; } int main(int argc, char* argv[]) { // tcp协议 or ipc协议 or epgm协议, 无需传入context zmqext::Publisher<int> intPub("int_topic", "tcp://*:5556"); zmqext::Subscriber<int> intSub("int_topic", "tcp://localhost:5556"); // zmqext::Publisher<int> intPub("int_topic", "ipc://./.zmq_example.ipc"); // zmqext::Subscriber<int> intSub("int_topic", "ipc://./.zmq_example.ipc"); // inproc协议 需要用同一个context创建socket // auto contextPtr = std::make_shared<zmq::context_t>(0); // zmqext::Publisher<int> intPub("int_topic", "inproc://test", contextPtr); // zmqext::Subscriber<int> intSub("int_topic", "inproc://test", contextPtr); // 设置订阅的回调函数 intSub.subscribe(intCallback); // Publish some data std::this_thread::sleep_for(std::chrono::milliseconds(20)); for (int i = 0; i < 3; ++i) { intPub.publish(i); std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "===" << std::endl; } return 0; }输出(subscriber订阅到数据后触发了回调函数intCallback):
Received integer: 0 === Received integer: 1 === Received integer: 2 ===基于cppzmq和MsgPack封装的PublisherSubscriber-发布订阅模式由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“基于cppzmq和MsgPack封装的PublisherSubscriber-发布订阅模式”