ブーストの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) });
?