【发布时间】:2013-04-16 12:04:16
【问题描述】:
我一直在尝试理解 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 方法是documented to return immediately。然后在读取处理程序 (connection::handle_read()) 中,如果 parse 返回 boost::indeterminate,我们可能会再次调用 async_read_some。鉴于我们已经知道我们在一个单独的线程中工作,这比socket_.read_some(buffer) 有什么好处。我问的原因是我想稍微更改消息解析以按需调用 read_some,但我想到的方法不适用于异步读取。
还有一个相关的问题:
async_read_some()
和
boost::thread th([](){ ret = read_some(); handle_read(ret) });?
【问题讨论】:
标签: c++ boost boost-asio