回答について: Boost:Asio を使用したゲームサーバーは非同期で動作しますか?
計算を行い、同時にクライアントからパケットを送受信するサーバーがある場合はどうなりますか?
私がhttpサーバーをコーディングしていた場合、送信されたすべてのデータは受信されたデータの関数であるため、回答の例で十分です。
私のプログラムが値を計算し、必要に応じてクライアントを更新する必要があると仮定します (更新頻度を 1 Hz にしたい場合、別の頻度を 10 Hz にしたい場合など)。
この種の構造は私にとって非常に役立ちます:
while(1){
pollNetworking(); //<- my function
value1 += 5; value2 = random();
}
私の pollNetworking 関数では、acceptor.accept(*socket,10); のようなものを呼び出すことを考えていました。ここで、10 はミリ秒単位のタイムアウトですが、タイムアウト パラメータがないため、これを構成する方法がわかりません。
スケーラビリティは最大の問題ではありません。ソケットごとに 1 つのスレッド、受け入れ用の追加のスレッド、および計算用の別のスレッドを生成できますか? これは簡単に実装できますか? 私はこれを可能な限り安定させたいので、次に速度、次にスケーラビリティです。マルチスレッドに関しては、まだきれいにコーディングしてデバッグできるとは思っていません。
編集: io_service::poll を使用できることを学びました。これは、ブロックせずに準備完了イベントのみをディスパッチします。したがって、必要に応じて、タイムアウトが0の同期関数です。