下面是一个简单的 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
运行示例
在终端中分别运行发布者和订阅者:
打开一个终端并运行发布者:
./publisher
打开另一个终端并运行订阅者:
./subscriber
此时,您应该能看到订阅者接收到来自发布者的消息。这个示例展示了如何使用 ZeroMQ 的 Pub/Sub 模式进行简单的通信。
内容由零声教学AI助手提供,问题来源于学员提问