zmq 多对多 异步 c++
时间: 2024-01-04 09:18:23 浏览: 183
ZMQ/ZeroMQ使用手册
5星 · 资源好评率100%
ZMQ是一个高性能的消息传递库,支持多种语言,包括C++。ZMQ可以用于构建多对多的连接模式,如扇出、发布-订阅、任务分发、请求-应答等。ZMQ的异步I/O机制可以让你构建多核应用程序,完成异步消息处理任务。在C++中使用ZMQ,你需要先安装ZMQ库,然后在代码中引入相应的头文件。下面是一个使用ZMQ实现多对多异步通信的C++代码示例:
```c++
#include <zmq.hpp>
#include <iostream>
#include <thread>
void server()
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_PUB);
socket.bind("tcp://*:5555");
int count = 0;
while (true)
{
std::string msg = "msg " + std::to_string(count++);
zmq::message_t message(msg.size());
memcpy(message.data(), msg.data(), msg.size());
socket.send(message);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}
void client()
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_SUB);
socket.connect("tcp://localhost:5555");
socket.setsockopt(ZMQ_SUBSCRIBE, "", 0);
while (true)
{
zmq::message_t message;
socket.recv(&message);
std::string msg(static_cast<char*>(message.data()), message.size());
std::cout << "Received: " << msg << std::endl;
}
}
int main()
{
std::thread t1(server);
std::thread t2(client);
t1.join();
t2.join();
return 0;
}
```
上述代码中,我们使用了ZMQ的发布-订阅模式,其中一个线程作为服务器,不断地向客户端发送消息;另一个线程作为客户端,接收服务器发送的消息。在代码中,我们使用了C++11的线程库,通过std::thread创建了两个线程,分别运行server()和client()函数。在server()函数中,我们创建了一个ZMQ的PUB类型的socket,并将其绑定到本地的5555端口上。然后,我们不断地向socket发送消息,并通过std::this_thread::sleep_for函数让线程休眠1秒钟。在client()函数中,我们创建了一个ZMQ的SUB类型的socket,并将其连接到本地的5555端口上。然后,我们通过socket.recv函数接收服务器发送的消息,并将其打印到控制台上。
阅读全文