zmq C++ 例子 推送多条 多条拉取 例子 使用recv_multipart
时间: 2024-03-20 18:43:21 浏览: 50
以下是一个使用 zmq C++ 库实现的推送多条-多条拉取模式的例子,使用了 `recv_multipart` 函数来接收多条消息:
**Pusher.cpp**
```cpp
#include <zmq.hpp>
#include <iostream>
#include <string>
#include <vector>
int main()
{
zmq::context_t context(1);
zmq::socket_t pusher(context, ZMQ_PUSH);
pusher.bind("tcp://*:5555");
std::vector<std::string> messages = {"message 1", "message 2", "message 3"};
for (auto it = messages.begin(); it != messages.end(); ++it) {
zmq::message_t message(it->size());
memcpy(message.data(), it->data(), it->size());
pusher.send(message, it == messages.end() - 1 ? 0 : ZMQ_SNDMORE);
std::cout << "Sent message: " << *it << std::endl;
sleep(1);
}
return 0;
}
```
**Puller.cpp**
```cpp
#include <zmq.hpp>
#include <iostream>
#include <string>
#include <vector>
int main()
{
zmq::context_t context(1);
zmq::socket_t puller(context, ZMQ_PULL);
puller.connect("tcp://localhost:5555");
while (true) {
std::vector<std::string> messages;
zmq::message_t message;
puller.recv_multipart(&messages);
for (auto it = messages.begin(); it != messages.end(); ++it) {
std::cout << "Received message: " << *it << std::endl;
}
}
return 0;
}
```
运行 Pusher.cpp 和 Puller.cpp,你就可以在控制台上看到推送的消息和拉取的消息了。这个例子中,Pusher 会向 Puller 推送多条消息,Puller 则会一直拉取并输出收到的所有消息。在接收消息时,使用 `recv_multipart` 函数可以一次性接收所有的消息。
阅读全文