在過去,我已經實現了多租戶系統,並使用請求主機頭將用戶隔離在租戶之間。我首先想到的是要採取同樣的方法,但使用WebSockets,但我打了幾個問題:多租戶鳳凰頻道
1)主機頭不會出現可用
2)有一個話題之間的一對一的關係id和頻道,即如果兩個不同的客戶端連接到不同的租戶,但連接到相同的主題(例如messages:lobby
),那麼他們將收到任何意味着其他租戶的消息。
我已經能夠通過在websocket連接字符串中包含標識租戶的查詢參數來解決(1)。 (2)事情有點不清楚。我可以爲主題命名空間以包含租戶的標識符,例如tenant1:messages:123
,但是在主題中現在有兩個變量,因此無法匹配tenant_id <> ":messages:" <> message_id
之類的函數。你可以用一個函數來解決這個問題,但是有很多樣板文件正在進行。
對於多租戶websockets有更好的策略嗎?
這絕對是一個很好的點。除了函數匹配之外,'Socket.channel'宏只能匹配'channel'消息形式的模式:*「'而不是'channel」*:messages:*「'.' – opsb