用 zmq_pair C++ 写一个发布订阅模式
时间: 2023-12-27 14:15:02 浏览: 37
抱歉,ZMQ_PAIR连接模式不适用于发布订阅模式。对于发布订阅模式,可以使用ZMQ_PUB和ZMQ_SUB套接字类型。下面是一个使用ZeroMQ的C++ API实现的发布订阅模式的示例代码:
Publisher(发布者):
```cpp
#include <zmq.hpp>
#include <string>
#include <iostream>
int main () {
zmq::context_t context(1);
zmq::socket_t publisher(context, ZMQ_PUB); // 创建一个发布者套接字
publisher.bind("tcp://*:5555"); // 绑定到本地地址,端口为5555
while (true) {
std::string message = "Hello from publisher!";
zmq::message_t zmq_message(message.size());
memcpy(zmq_message.data(), message.c_str(), message.size());
publisher.send(zmq_message); // 发布消息
sleep(1);
}
return 0;
}
```
Subscriber(订阅者):
```cpp
#include <zmq.hpp>
#include <string>
#include <iostream>
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 zmq_message;
subscriber.recv(&zmq_message); // 接收消息
std::string message(static_cast<char*>(zmq_message.data()), zmq_message.size());
std::cout << "Received message: " << message << std::endl;
}
return 0;
}
```
在上述代码中,发布者将消息发送到端口5555,而订阅者连接到该地址并订阅所有主题。当发布者发布一条消息时,订阅者将接收到该消息并将其打印到控制台上。