我一直在尝试理解 boost 的http server 3 example中的逻辑。此示例中的请求在 connection.cpp 中的 start() 方法中读取,该方法调用:
socket_.async_read_some(boost::asio::buffer(buffer_),
strand_.wrap(
boost::bind(&connection::handle_read, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
请注意, async_read_some 方法被记录为立即返回。然后在读取处理程序 ( connection::handle_read()
) 中,如果 parse 返回,我们可能会再次调用 async_read_some boost::indeterminate
。socket_.read_some(buffer)
鉴于我们已经知道我们在一个单独的线程中工作,这有什么好处。我问的原因是我想更改消息解析以按需调用 read_some ,但我想到的方法不适用于异步读取。
另外,一个相关的问题:两者之间有什么区别吗?
async_read_some()
和
boost::thread th([](){ ret = read_some(); handle_read(ret) });
?