現在のプロジェクトでサーバーを作成する必要がありますが、この分野での経験はほとんどありません。私の質問は、プロジェクトでAsioを使用するだけで、通常のサーバーが直面する問題(部分的な読み取り、マルチスレッドの問題など)を単純に処理できるかどうかです。
(私のサーバーは同時に何百ものクライアントを処理する必要があります)
現在のプロジェクトでサーバーを作成する必要がありますが、この分野での経験はほとんどありません。私の質問は、プロジェクトでAsioを使用するだけで、通常のサーバーが直面する問題(部分的な読み取り、マルチスレッドの問題など)を単純に処理できるかどうかです。
(私のサーバーは同時に何百ものクライアントを処理する必要があります)
ASIO は、低レベルのソケット プログラミングとポーリング コードを処理します。生のネットワーク データを処理するには、すべての機能を提供する必要があります。最終的に、読み取りコールバックが呼び出されるたびに、ネットワークから予測できない数のバイトが取得されます。これらのバイトを取得して、それらからアプリケーション メッセージを再構築するのはユーザー次第です。
しかし実際、不特定のバイト数の受信に関する限り、それがどのように実装されているかについて心配する必要はありません。
マルチスレッドは、ASIO プロセッサを同時に複数回実行できるという意味では「簡単」ですが、一度に複数回実行されることを処理できる読み取りコールバックを提供するのはユーザーの責任です。
Asio は意図的にマルチスレッド化されていません。オペレーティング システムの、、、またはその他のメカニズムを介して多重化することにより、同時実行を処理します。select()
kqueue
epoll
部分受信に関しては、TCP がメッセージ境界を尊重するようにする自動的な方法はありません。Asio はそれについて何もできないので、アプリケーション レベルで完了を示すためのテクニックが必要になります。HTTP は伝統的に、終了時にソケットを閉じることでこれを処理しますが、メッセージのサイズを事前に送信することも可能です。