Rubyでゲームサーバーを書こうとしています。ゲームの 1 つの機能には、プレイヤーが歩き回る機能が含まれており、他のプレイヤーはそれを見ることができるはずです。
イベント マシンを使用して、純粋なソケットのデモを既に作成しました。しかし、ほとんどの通信は http ベースになるため、http ポーリング ソリューションを探しています。もちろん、イベントマシンで書くこともできますが、この種の仕事のための宝石はすでにありますか?
faye のようなものを試してみましたが、これらのほとんどは、チャネルの購読や公開などのメッセージング システム用であり、プッシュするクライアントを制御できないようです。私の場合、特定のクライアントにプッシュできるようにする必要があります。たとえば、1 人の男が 10,10 から 20,20 に移動し、その周りの人だけ (おそらく 0,0 から 30,30 に移動しますが、40,50 の男には移動しません) ) メッセージを受信する必要があります。
------------けいれんを伴う前進行
ここに簡単な更新があります。私はクランプに取り組んでおり、接続数は 5000 で、毎秒 100 クライアントが移動しています。CPU 使用率はほぼ 100% です。両方の数値を 2 倍にしても、CPU 使用率は 100% 程度のままで、応答が非常に遅くなります。
明らかに、所有していたすべてのリソースを使用しているわけではありません。代わりに、占有されている CPU コアは 1 つだけです。さらに作業が必要です。
------------Node.jsの番
@aam1r 実際、Node.js はクランプよりも優れています。5000 の接続と 1 秒あたり 100 のクライアントの移動で、CPU 使用率は 60% を超えています。10000 接続と毎秒 200 クライアント移動に倍増すると、CPU 使用率は 100% になり、応答が遅くなります。ここでも同じ問題があります。cramp または Node.js は、プロセスごとに 1 つの CPU コアしか使用できません。それは問題だ。
------------JRubyはどうですか?
GILが存在するため、Ruby MRI では真のマルチスレッド同時実行はありません。Node.js にもありません。だから、JRuby を試してみます。
クライアントが移動すると、別のスレッドを使用して、他のすべてのクライアントが通知する必要があることを見つけます (これは CPU を大量に使用する作業です)。次に、結果をチャネルにプッシュします。
メイン スレッドは単にチャネルをサブスクライブします。結果が得られたら、それらをクライアントにプッシュします。
ただし、デモを作成するには時間が必要です。