C++ zmq pull push模式 数据发收
时间: 2023-10-10 13:11:06 浏览: 128
C++实现mqtt 的数据收发,代码进行了注释说明,增加CMakelist编译, 新增文档说明
对于使用 ZeroMQ(zmq)的 Pull-Push 模式,你可以通过以下步骤实现数据的发送和接收:
1. 启动 Push 端和 Pull 端,分别创建 socket,并绑定到对应的地址上。
```c++
// Push 端
zmq::context_t context(1);
zmq::socket_t push_socket(context, ZMQ_PUSH);
push_socket.bind("tcp://*:5555");
// Pull 端
zmq::context_t context(1);
zmq::socket_t pull_socket(context, ZMQ_PULL);
pull_socket.bind("tcp://*:5556");
```
2. 在 Push 端,使用 `zmq::send()` 函数发送数据。注意,该函数需要传入一个 `zmq::message_t` 类型的消息对象,该对象可以通过 `zmq::message_t(const void* data, size_t size)` 构造函数来创建。
```c++
// Push 端发送数据
std::vector<std::string> msgs = {"Hello", "world", "!"};
for (const auto& msg : msgs) {
zmq::message_t message(msg.size());
memcpy(message.data(), msg.c_str(), msg.size());
push_socket.send(message);
}
```
3. 在 Pull 端,使用 `zmq::recv()` 函数接收数据。该函数会返回一个 `zmq::message_t` 类型的消息对象,其中包含接收到的数据。
```c++
// Pull 端接收数据
while (true) {
zmq::message_t message;
pull_socket.recv(&message);
std::string msg(static_cast<char*>(message.data()), message.size());
std::cout << "Received message: " << msg << std::endl;
}
```
以上就是使用 ZeroMQ 实现 Pull-Push 模式数据发送和接收的基本步骤。需要注意的是,在实际使用中,还需要对数据进行序列化和反序列化操作,以确保数据可以正确传输。同时,在循环接收数据时,需要根据具体的业务需求来判断何时退出循环。
阅读全文