Apache / PHPサーバーがNode.jsサーバーにデータを送信できるようにするリアルタイムデータシステムを構築しています。Node.jsサーバーは、socket.ioを介してそのデータを関連するクライアントにすぐに送信します。そのため、Apache / PHPサーバーは、データと、データの送信先のユーザーをNode.jsに指示するユーザートークンを含むリクエストを作成します。
現在、これは正常に機能しています。ユーザーのsocket.io接続をユーザートークンに関連付ける連想配列があります。問題は、これを複数のサーバーにスケーリングし始める必要があることです。当然、socket.ioのデフォルト構成では、ノードワーカー間で接続を共有できません。
私が考えていた解決策は、RedisStore機能を使用し、各ワーカーに同じRedisストアを表示させることでした。私は調査を行ってきましたが、大規模なグループ(部屋)にメッセージをブロードキャストするためにpub/sub機能を使用する方法に関するドキュメントがたくさんあります。それは問題ありませんが、単一のクライアントにメッセージを送信できる必要があるため、RedisStoreからユーザーのsocket.io接続を取得する方法が必要です。
私が今これを行うと考える唯一の方法は、ユーザーのトークンで名前が付けられた大量の「部屋」を作成し、各部屋に1人のユーザーしかいないことです。それから私はちょうどその部屋に放出することができました。しかし、それは非常に非効率的なようです。
Redisからユーザーの一意のsocket.io接続を取得するためのより良い方法はありますか?