1

過去に、マルチテナント システムを実装し、要求ホスト ヘッダーを使用してテナント間でユーザーを分離しました。私の最初の考えは、同じアプローチを取ることでしたが、websocket を使用しましたが、いくつかの問題に遭遇しました。

1) ホスト ヘッダーが利用できないようです

2) トピック ID とチャネルの間には 1 対 1 の関係があります。つまり、2 つの異なるクライアントが異なるテナントから同じトピックに接続している場合 (例: messages:lobby)、他のテナント向けのメッセージを受信します。

Websocket 接続文字列にテナントを識別するクエリ パラメータを含めることで、(1) を解決できました。(2) は少しわかりにくいところです。トピックに名前空間を付けてテナントの識別子を含めることもできますが、トピックにはtenant1:messages:1232 つの変数があるため、 などの関数を一致させることはできませんtenant_id <> ":messages:" <> message_id。単一の関数でこれを回避できますが、多くのボイラープレートが進行中です。

マルチテナント websocket のためのより良い戦略はありますか?

4

1 に答える 1

3

これをコメントではなく回答として書いて申し訳ありませんが、まだ50の評判はありません。

tenant_id を先頭に追加する代わりに、トピックを次のようにしてみませんmessages:tenant1:123か?

関数でパターン マッチを実行し、ID を分割して、実際にそれらを使用する関数に渡すことができます。

    def foo("messages:" <> ids) do
      [tenant_id, message_id] = String.split(ids, ":")
      bar(tenant_id, message_id)
    end

    def bar(tenant_id, message_id) do
      # Do something
    end
于 2016-10-25T20:29:27.963 に答える