Это мой код сервера:подталкивания async_read_some точно не асинхронный
socket_.async_read_some(boost::asio::buffer(data_read.data(), Message::header_length),
boost::bind(&TcpConnection::handle_read_header, shared_from_this(),
boost::asio::placeholders::error));
Если я пишу на следующий код в цикле
boost::thread::sleep(boost::posix_time::seconds(2));
в функции «handle_read_header», которая вызывается выше «async_read_some» весь поток ждет до конца сна. Поэтому, когда приходит другой запрос, он не обрабатывается до тех пор, пока сон не закончится. Не предполагается ли асинхронно обрабатывать каждый запрос? Я новичок в повышении и C++. Пожалуйста, дайте мне знать, если я упомянул что-то не так.
На самом деле, даже если «sleep» Boost :: asio будет продолжать читать асинхронно. Просто, если обработчик работает, и вы используете только один поток, Asio не имеет возможности уведомить вас о завершении чтения. Как вы ожидаете, что он будет себя вести? – ereOn
@ereOn Вы говорите, что методы, которые я вызываю внутри 'handle_read_header', должны быть в другом потоке? и ereOn не async_read_some создает новый поток для каждого обработчика? – Navin
@ereOn, если я вызову поток внутри обработчика к тому времени, когда поток закончит сокет, возможно, изменился новым запросом. – Navin