ZBLOG

C++ zmq 发布/订阅 demo

下面是一个简单的 C++ 示例,演示如何使用 ZeroMQ 实现发布/订阅模式。这个例子包括一个发布者和一个订阅者。

安装 ZeroMQ

首先确保你已经安装了 ZeroMQ 和其 C++ 绑定库(cppzmq)。你可以使用包管理器来安装,例如在 Ubuntu 上:

  1. sudo apt-get install libzmq3-dev

然后,你需要下载并安装 cppzmq,可以从 cppzmq GitHub 获取最新版本。

发布者代码 (publisher.cpp)

  1. #include <iostream>
  2. #include <string>
  3. #include <zmq.hpp>
  4. #include <unistd.h> // For sleep function
  5. int main() {
  6. zmq::context_t context(1);
  7. zmq::socket_t publisher(context, ZMQ_PUB);
  8. // 绑定到 TCP 地址
  9. publisher.bind("tcp://*:5555");
  10. // 等待一些时间,以确保订阅者有机会连接
  11. sleep(1);
  12. while (true) {
  13. std::string message = "Hello, World!";
  14. // 发送消息给所有订阅者
  15. zmq::message_t msg(message.size());
  16. memcpy(msg.data(), message.c_str(), message.size());
  17. publisher.send(msg, zmq::send_flags::none);
  18. std::cout << "Published: " << message << std::endl;
  19. sleep(1); // 每秒发布一次消息
  20. }
  21. return 0;
  22. }

订阅者代码 (subscriber.cpp)

  1. #include <iostream>
  2. #include <string>
  3. #include <zmq.hpp>
  4. int main() {
  5. zmq::context_t context(1);
  6. zmq::socket_t subscriber(context, ZMQ_SUB);
  7. // 连接到发布者地址
  8. subscriber.connect("tcp://localhost:5555");
  9. // 设置过滤器以接收所有主题的消息,这里为空字符串表示接收所有消息
  10. subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0);
  11. while (true) {
  12. zmq::message_t msg;
  13. // 接收消息
  14. subscriber.recv(msg, zmq::recv_flags::none);
  15. std::string received_message(static_cast<char*>(msg.data()), msg.size());
  16. std::cout << "Received: " << received_message << std::endl;
  17. }
  18. return 0;
  19. }

编译代码

确保你已将 ZeroMQ 库链接到你的编译器中。以下是一个可能的编译命令:

  1. g++ -o publisher publisher.cpp -lzmq
  2. g++ -o subscriber subscriber.cpp -lzmq

运行示例

在终端中分别运行发布者和订阅者:

  1. 打开一个终端并运行发布者:

    1. ./publisher
  2. 打开另一个终端并运行订阅者:

    1. ./subscriber

此时,您应该能看到订阅者接收到来自发布者的消息。这个示例展示了如何使用 ZeroMQ 的 Pub/Sub 模式进行简单的通信。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19938

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?