基本的なロジックは次のとおりです。
メインスレッド:
for(;;) {
ソケット
async_read head(パケットの長さ) を受け入れ、head_handler
io_service.run() にバインド }
head_handler (非スレッド):
async_read body (head から読み取った長さを使用)、body_handler にバインド
body_handler (非スレッド):
メッセージを Request オブジェクト (カスタム クラス) に解析します。
リクエストを request_pool にプッシュする
読み取りスレッド:
for(;;) {
request_pool が空でない場合 (それ以外の場合はロック) { Request によって記述されたアクションを実行 } }
したがって、上記のロジックを使用した単純なエコー サーバーがあります。渡されたメッセージはすべて印刷されます。ただし、最初のメッセージのみが表示され、他のすべてのメッセージには「xxx.xxx.xxx.xxx が接続されました」というメッセージが正しく印刷されますが、メッセージは印刷されません。