Crow:run的流程3 接受http连接请求do_accept

Crow:run的流程2 建立io_service及线程-CSDN博客

介绍了run的Crow会启动一个线程并用于处理do_accept。

那么do_accept本身是做什么的呢?

void Server::do_accept()
{
    if (!shutting_down_)
    {
        uint16_t service_idx = pick_io_service_idx();
        asio::io_service& is = *io_service_pool_[service_idx];
        task_queue_length_pool_[service_idx]++;
        ...
    }
}

用于根据当前处理任务的数量多少,从io_service池取出一个is,也就相当于是从线程池中取出一个线程(因为每个线程阻塞在一个io_service上)。

然后将增加该线程处理的任务数量。

void do_accept()
{
    if (!shutting_down_)
    {
        ...

        auto p = new Connection(
          is, handler_, server_name_, middlewares_

你可能感兴趣的:(Crow,c++)