私は、主にチャット ベースのリアルタイム ゲームを構築しています。これらのチャットの多くを同時に実行し、Web ソケット経由でデータを送受信する必要があります。
ゲームごとに 1 つのプロセスを生成するのではなく、ゲームごとに 1 つのスレッドを持つ 1 つのプロセスを作成する必要があると言われました (おそらく Event Machine を使用します)。
私はソケット部分に Juggernaut を使用しています。これにより、パブリッシュ/サブスクライブ システムを使用して、ゲーム内のすべてのプレーヤーにデータを送信できます。各プレーヤーは 1 つのゲームをサブスクライブします。しかし、各プレイヤーからその特定のゲームにデータを送信するにはどうすればよいでしょうか?
ゲームIDまたはチャンネルIDをクライアントからサーバーに送信し、それを対応するスレッドに送信できると考えていました。
しかし、スレッドに何かを送信するにはどうすればよいでしょうか?
データをスレッドに送信するには、Ruby Thread Queue を使用できます。
Ruby 3.3.0: https://ruby-doc.org/3.3.0/Thread/Queue.html
(これを読んでいて、新しいバージョンの Ruby がある場合は、自由にこの回答を編集して Ruby のバージョンを更新してください)