C++ 学習プロジェクトの一環として、単純なマルチプレイヤー ゲームを作成したいと考えています。
せっかくなので、出来立てではなく、しっかりやっていきたいなと思いました。
私の理解が正しければ、Apache は Thread-per-connection アーキテクチャを使用しますが、nginx はイベントループを使用し、着信接続専用のワーカー[x]を使用します。より高い同時実行レベルをサポートしているため、nginx の方が賢明だと思います。右?
私もこの巧妙な類推に出くわしましたが、それが私の状況に適用できるかどうかはわかりません. この類推はまた、非常に理想主義者のようです。コンピューターが 100% の CPU で実行されているのを見たことはほとんどありません (無数の Chrome タブが開いていて、Photoshop とその他のものが同時に実行されていても)
また、ユーザーが使用するスレッドの数を尋ねた SO 投稿 (どういうわけか私の履歴から消えた) に出くわしましたが、その答えの 1 つは、約 700 スレッド、最大 10,000 スレッドであっても完全に許容できるというものでした。ただし、この質問はJVMに関連していました。
では、約 5,000 ユーザーの架空のユーザー ベースを見積もってみましょう。どのアプローチが「最も同時」であるべきですか?
- すべてを単一のスレッドで実行するリアクター パターン。
- スレッドプールを使用したリアクター パターン (おおよそ、スレッド プールの大きさはどのくらいですか?
- 接続ごとにスレッドを作成してから、接続が閉じるスレッドを破棄します。
オプション 2 が私にとって最良の解決策のように聞こえることは認めますが、私はこれらすべてについて非常に環境に配慮しているため、少し素朴で明らかな欠陥を見落としている可能性があります。また、実装するのはかなり難しいようです。
PS: POCO C++ Librariesの使用を検討しています。代替ライブラリ ( boostなど) を提案しても問題ありません。しかし、多くの人は、POCO のライブラリは非常にクリーンで理解しやすいと言っています。ですから、私はそれを使用することをお勧めします。そうすれば、私が使用しているものの使用方法について学ぶことができます。