zmq C++ 例子 推送多条 多条拉取 例子 使用迭代器
时间: 2023-10-20 14:07:19 浏览: 144
迭代器实例
以下是一个使用 zmq C++ 库实现的推送多条-多条拉取模式的例子,使用了迭代器来遍历消息:
**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");
std::vector<std::string> messages;
while (true) {
zmq::message_t message;
puller.recv(&message);
std::string msg(static_cast<char*>(message.data()), message.size());
messages.push_back(msg);
int more = 0;
size_t more_size = sizeof(more);
puller.getsockopt(ZMQ_RCVMORE, &more, &more_size);
if (!more) {
for (auto it = messages.begin(); it != messages.end(); ++it) {
std::cout << "Received message: " << *it << std::endl;
}
messages.clear();
}
}
return 0;
}
```
运行 Pusher.cpp 和 Puller.cpp,你就可以在控制台上看到推送的消息和拉取的消息了。这个例子中,Pusher 会向 Puller 推送多条消息,Puller 则会一直拉取并输出收到的所有消息。注意,在发送消息时需要使用 `ZMQ_SNDMORE` 标志来告诉 ZeroMQ 还有更多的消息要发送。在接收消息时,需要使用 `ZMQ_RCVMORE` 标志来判断是否还有更多的消息没有接收完。
阅读全文