Ruby でスレッドと通信するにはどうすればよいですか?

概要

私は、主にチャット ベースのリアルタイム ゲームを構築しています。これらのチャットの多くを同時に実行し、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 のバージョンを更新してください)