私はブーストをコンパイルしています:: ASIO例(?): http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/examples.html#boost_asio.examples.http_server_3ブースト:: ASIOの同時実行
は、マルチスレッドサーバー実装することになっています。
ここで、async_readハンドラでは、メッセージを出力して30秒間スリープします。私は2つのブラウザでlocalhostを開き、handle_readが一度呼び出され、次に30秒間何も起こらず、最後にhandle_readが2度目に呼び出されることがわかります。
io_Service.runは5つのスレッドで呼び出されます。
ハンドラが同時に呼び出されないのはなぜですか?例えばなぜ、最初のhandle_readが終了するのを待ってから2番目の呼び出しを呼び出すのですか?
あなたのコードを教えてください。私の賭けはあなたが*睡眠の後*まで*新しいリスナーを登録しないということです。 –
BEFOREスリープから新しいasync_read()を開始していますか? – Olympian
はい、私は新しいasync_readの前にスリープ状態にしています。 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/http/server3/connection.cpp 基本的にif(!e)の直後です。 私はそれが動作すると思った方法は、これが接続ごとに動作するということです。だから私はクライアント1のデータを処理し、処理が終了したら新しいデータを受け取るだけです。 しかし、クライアント1を処理している間に、クライアント2も処理したいと思います。 – thelamb