使用Boost Asio库打开多个端口

Opening multiple ports using Boost Asio libraries

本文关键字:Boost Asio 使用      更新时间:2023-10-16

我是Boost Asio库的新手,我的要求是构建一个服务器,它应该异步侦听600个不同的端口(TCP通信)。有人能给我推荐一个使用Boost Asio实现这一目标的聪明方法吗。我尝试过使用Boost Asio文档中提供的echo服务器示例,但无法真正理解boost::asio::io_service io_seervice;

using namespace std; // For atoi.
for(long port=50000;port<=50600;port++)
{
    server s(io_service, port);
    io_service.run();
}

有人能阐明这一点吗?

io_service负责处理分配给它的所有I/O;您不需要为每个端口创建一个单独的实例。对于您要做的事情,您需要创建600个单独的服务器实例,然后调用io_service.run()

vector<shared_ptr<server> > servers;
for (uint16_t port = 50000; port != 50600; ++port)
{
    servers.push_back(shared_ptr<server>(new server(io_service, port)));
}
io_service.run();

尝试一些类似的方法

boost::asio::ip::tcp::socket socket(io_service);
socket.async_connect(endpoint, connectHandler);

socket变量是单个套接字的实例,对async_connect的调用将建立到endpoint定义的位置的异步连接。您可以以类似的方式执行对socket的异步读取和写入,只需确保io_service.run()在某个线程中运行,否则异步调用(和关联的回调)将不会执行。。。