過去に、マルチテナント システムを実装し、要求ホスト ヘッダーを使用してテナント間でユーザーを分離しました。私の最初の考えは、同じアプローチを取ることでしたが、websocket を使用しましたが、いくつかの問題に遭遇しました。
1) ホスト ヘッダーが利用できないようです
2) トピック ID とチャネルの間には 1 対 1 の関係があります。つまり、2 つの異なるクライアントが異なるテナントから同じトピックに接続している場合 (例: messages:lobby
)、他のテナント向けのメッセージを受信します。
Websocket 接続文字列にテナントを識別するクエリ パラメータを含めることで、(1) を解決できました。(2) は少しわかりにくいところです。トピックに名前空間を付けてテナントの識別子を含めることもできますが、トピックにはtenant1:messages:123
2 つの変数があるため、 などの関数を一致させることはできませんtenant_id <> ":messages:" <> message_id
。単一の関数でこれを回避できますが、多くのボイラープレートが進行中です。
マルチテナント websocket のためのより良い戦略はありますか?