ZBLOG

C++ zmq 发布/订阅 demo

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

安装 ZeroMQ

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

sudo apt-get install libzmq3-dev

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

发布者代码 (publisher.cpp)

#include <iostream>
#include <string>
#include <zmq.hpp>
#include <unistd.h> // For sleep function

int main() {
    zmq::context_t context(1);
    zmq::socket_t publisher(context, ZMQ_PUB);

    // 绑定到 TCP 地址
    publisher.bind("tcp://*:5555");

    // 等待一些时间,以确保订阅者有机会连接
    sleep(1); 

    while (true) {
        std::string message = "Hello, World!";
        
        // 发送消息给所有订阅者
        zmq::message_t msg(message.size());
        memcpy(msg.data(), message.c_str(), message.size());
        publisher.send(msg, zmq::send_flags::none);

        std::cout << "Published: " << message << std::endl;

        sleep(1); // 每秒发布一次消息
    }

    return 0;
}

订阅者代码 (subscriber.cpp)

#include <iostream>
#include <string>
#include <zmq.hpp>

int main() {
    zmq::context_t context(1);
    zmq::socket_t subscriber(context, ZMQ_SUB);

    // 连接到发布者地址
    subscriber.connect("tcp://localhost:5555");

    // 设置过滤器以接收所有主题的消息,这里为空字符串表示接收所有消息
    subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0);

    while (true) {
        zmq::message_t msg;
        
        // 接收消息
        subscriber.recv(msg, zmq::recv_flags::none);
        
        std::string received_message(static_cast<char*>(msg.data()), msg.size());
        
        std::cout << "Received: " << received_message << std::endl;
    }

    return 0;
}

编译代码

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

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

运行示例

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

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

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

    ./subscriber
    

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?