有多少个对象boost :: asio :: ip :: tcp :: acceptor我需要在多个线程中接受连接吗?

时间:2013-06-18 21:56:06

标签: boost-asio

我使用十个线程池作为接受者(侦听器),它们接受连接并在其他线程中运行其处理任务。在这种情况下,我需要一个或多个acceptor对象?

{
    boost::asio::io_service io_service_acceptors;
    boost::asio::io_service::work work_acceptors(io_service_acceptors);

    // Do I need a single object or many like threads "thr_grp_acceptors"?:
    // std::vector<boost::asio::ip::tcp::acceptor> acpt_grp_acceptors
    boost::asio::ip::tcp::acceptor acceptor(io_service_acceptors,
        ba::ip::tcp::endpoint(ba::ip::tcp::v4(), port)); 

    std::vector<boost::thread> thr_grp_acceptors;

    for(size_t i = 0; i < 10; ++i)
        thr_grp_acceptors_.emplace_back(
            boost::bind(&boost::asio::io_service::run, &io_service_acceptors));

    acceptor_.async_accept(...);
}

1 个答案:

答案 0 :(得分:1)

您的第二个和其他接受者将无法绑定()到端口,所以不,您不能在同一个端口上使用多个接受器。您可以一次运行多个 async_accept ,其处理程序可以在不同的线程中触发。但是,在我的应用程序中,我一次只有一个活动的 async_accept ,这对我来说足够重。