マルチプレイヤーゲームのサーバー側ネットワークを書いています。このゲームはRPGであり、絶対最大収容人数は2000人ですが、実際には約300人で最大になりますが、それより多い場合も少ない場合もあります。長い間、多くのクライアントが関与するネットワーキングを行う必要があるたびに、何百ものスレッドを使用する必要がなかったため、NIOに固執してきました。最近、2つのモデルを詳細に説明したPowerPointプレゼンテーションに出くわしました。これにより、クライアントごとのスレッドモデルがNIOよりも優れているように見えました。また、古いIOが実際にNIOよりも優れている可能性があると記載されている場所も見つけました。
PowerPointはここにあります(少し古いです): http: //www.mailinator.com/tymaPaulMultithreaded.pdf。
私はまだコンテンツを書いていませんので、ネットワーク設計全体を変更する必要があったとしても、最初から始めるのは問題ありません。私は時間のプレッシャーはありません。当初、私はNIOを使用してReactorパターンの実装を設計していました(イベントを選択し、イベントを処理するハンドラーをディスパッチします)。
詳細については、http://en.wikipedia.org/wiki/Reactor_patternを参照してください。
私のreactorの実装全体は、単一のスレッドを使用するように設計されています。古いIOの方が優れている可能性があることを読んだので、実際にはジレンマに陥りました。すべてのCPUパワーを最大限に活用するためだけに複数のスレッドを使用する複雑なNIOシステムを設計したくはありませんが、単一のアプリケーションで300以上のスレッドを使用するという考えにも固執しています。私の目的に合ったデザインはどれですか?クライアントごとのスレッドの利点は、本質的にすべてのCPUパワーを実際に利用することですが、同時に、システムを停止させます。言うまでもなく、単一スレッドのスタックサイズは、多くのメモリを消費します(数百倍にした場合)。リアクターパターンに固執する必要がありますか?
この質問は少し曖昧ですが、このサイトや自分の問題を扱っているウェブサイトで質問を見つけることができなかったので、自分の状況に合わせて具体的に質問する必要があると感じています。ゲームに関するものが1つありましたが、ゲームは数万人のプレーヤーを処理することを目的としていました。
どうもありがとう!説明が必要な場合は、お問い合わせください。