私は現在JavaNIOを読んでいて、過去に自分でJavaNIOのいくつかの実装を作成しました。しかし、私はサーバーのパフォーマンスについて実際に考えたことはありません-それは本当にばかげているように見えます、そしてそれはそうです。シングルスレッドのリアクターでいいと言われるのを聞いたことがありますが、私は自分の持っているコアを本当に活用したいと思っています。
私が作成する実装はゲームなので、ゲームロジックスレッドもいくつかあるので、多くのスレッドを使用することはできません。どちらかといえば、おそらく2つだけです。
これが私が思いついたプロットです:
- 優先度の高いリアクター
- 接続を受け入れます
- ゲームのログインプロセスを処理します(クライアントはパケットを送信し、サーバーはプロセスを送信し、サーバーは応答パケットを送信します。ここでは大量のデータではありません)
- リソースファイルデータをオンデマンドで配布します(ゲームは、クライアントがゲームのほぼすべてのリソースを含むキャッシュに保存するデータをサーバーが送信するように構築されています。これのほとんどは、ゲームの読み込み時に行われますが、それでも多くのことが発生します演劇としてのバックグラウンドで)
- 標準リアクター
- ゲーム内のパケットを読み取って応答します。これらは小さいことが多いですが、多くの場合、プレーヤーが行うことのほぼすべてがパケットとして配布されるため、約200人のプレーヤーを適切に処理できるように拡張したいと思います)
目標:
- 約200〜300人のプレーヤーに適したスケール
- ゲームパケットにすばやく応答する
- 前述のファイルデータをすばやく配布する
- 接続をすばやく受け入れる
また、あなたがそれに精通しているなら、ゲームはRuneScapeです。私の目標は、RuneScapeの公式サーバーソフトウェアをエミュレーションして、クライアントの1つで使用できるようにすることです。これは一般的な方法です。www.runelocus.com、www.rune-server.orgを参照してください。
私の質問は、これは良い実装になると思いますか?原子炉を1つだけ持つ方が良い考えですか?それとももっと使うべきですか?送受信されるデータはほぼ同じで、優先度の高いリアクターではもう少し多いと思います(これが優先度の高い理由です)。
また、私がそれを高優先度と定義するとき、私は実際にはそれを標準的な原子炉よりも文字通り優先しているわけではありません。ゲームパケットよりも重要と見なされるタスクを処理しているだけです。
フィードバックは大歓迎です:)説明/説明が必要な場合は、lemmeが知っています!