ゲームルーム、一般的なチャットなどのロビービューに基づいてチェスのマッチメイキングシステムを書いています。これまでのところ、プロトタイプは機能していますが、サーバーで行ったいくつかのことには大きな疑問があります。ゲームロビーサーバーを書くことは私にとって新しいプログラミングエクスペリエンスであり、そのための明確で正確なプログラミングモデルはありません。また、それがどのように機能するかを説明した論文も見つかりませんでした。アマゾンから「Javaネットワークプログラミング3版」を注文しましたが、まだ出荷を待っていましたが、この本で役立つ例や情報が見つかると思います。
その間、私はあなたの意見を集めて、サーバーを正しく書く方法を学ぶことができるようにいくつかのことをどのように処理するかを見たいと思います。ここに私の頭の上のいくつかの質問があります:(もっと来るかもしれません)
最初に、サーバーの動作を定義しましょう。主な機能は、クライアントとのTCP接続を保持し、クライアントが生成したイベントをリッスンして、他のプレーヤーにディスパッチすることです。しかし、それだけではありませんか?
クライアントごとに1つのスレッドを使用する必要がありますか?その場合、300クライアント= 300スレッド。それは多すぎませんか?それをサポートするにはどのようなハードウェアが必要ですか?そして、ロビーはおよそどのくらいの帯域幅を消費しますか?
クライアントのソケットを保持するためにどのようなデータ構造を使用する必要がありますか?スループットを損なうことなくイベントをディスパッチするために繰り返し処理するときに、同時変更(たとえば、プレーヤーがロビーに入る、またはロビーに存在する)からそれをどのように保護しますか?ここでConcurrentHashMapが正しい答えですか、それとも私が知っておくべきいくつかのテクニックがありますか?
ユーザーがロビーに入るとき、ロビーの状態をユーザーに転送するためにどのようなメカニズムを使用しますか?そして、これが起こっている間、他のイベントはどこで泡立ちますか?