デフォルト設定では、Sailsは単一のサーバーとそれに接続されたすべてのクライアントとの間のリアルタイム通信を可能にします。Sailsアプリを複数のサーバーにスケールする場合、どのサーバーに接続されているかに関係なく、リアルタイムメッセージをクライアントに確実に配信するためには、追加の設定が必要になります。この設定には通常、以下が含まれます。
@sailshq/socket.io-redis
に更新し、ホストされたRedisインスタンスを指すように、適切なhost
、password
などのフィールドを設定。ホストされたRedisのインストールでは特別な設定は必要ありません。適切なホストアドレスと認証情報を/config/sockets.js
ファイルにプラグインするだけで、@sailshq/socket.io-redis
アダプターがすべてを処理します。
注意:マルチサーバー環境で動作する場合、コールバックのない一部のソケットメソッドは揮発性です。つまり、コードがすぐに実行されるように見えても、完了するまでに不定の時間がかかります。たとえば、
.addRoomMembersToRoom()
の呼び出しの直後に.broadcast()
を呼び出すようなコードを検討する際には、これを念頭に置いておくことが重要です。このような場合、新しいルームメンバーはおそらく新しくブロードキャストされたメッセージを受信しないでしょう。なぜなら、.broadcast()
が呼び出されたときに、更新されたルームメンバーシップがクラスター内の他のサーバーにまだ伝播されていない可能性が高いからです。