したがって、boost HTTP Server 3 の例に基づいて、メッセージとともに本文を送信できるように connection::handle_read を変更したいと思います。ただし、これを行う方法は私には明らかではありません。私は次のようなものを書きたい:
void connection::handle_read(const boost::system::error_code& e,
std::size_t bytes_transferred)
{
...
if (result)
{
boost::asio::async_write(socket_, reply.to_buffers(),
strand_.wrap(
boost::bind(&connection::write_body, shared_from_this(),
boost::asio::placeholders::error)));
}
}
void connection::write_body(const boost::system::error_code& e)
{
boost::asio::async_write(socket_, body_stream_,
strand_.wrap(
boost::bind(&connection::handle_write, shared_from_this(),
boost::asio::placeholders::error)));
}
はどこbody_stream_
ですかasio::windows::stream_handle
。
しかし、このアプローチは http チャンクをまったく処理しません (つまり、各チャンクの前にチャンクのサイズが送信されることを意味します)。この問題にアプローチする最善の方法は何ですか? ブースト const バッファーの要件に準拠する ifstream 用の独自のラッパーを作成する必要がありますか? または、ループ内でのasync_write
複数の呼び出しの効果をシミュレートしてみてください。async_write_some
ソリューションの要件は、ファイル全体を常にメモリに保持することはなく、1 つまたはいくつかのチャンクのみを保持することです。
ASIO とソケットの初心者です。アドバイスをいただければ幸いです。