过去,我实现了多租户系统并使用请求主机标头在租户之间隔离用户。我的第一个想法是采用相同的方法,但使用 websockets,但我遇到了几个问题:
1)主机头似乎不可用
2)主题ID和频道之间存在一对一的关系,即如果两个不同的客户端从不同的租户连接到相同的主题(例如messages:lobby
),那么他们将收到任何用于其他租户的消息。
我已经能够通过在 websocket 连接字符串中包含一个标识租户的查询参数来解决 (1)。(2)是事情有点不清楚的地方。我可以命名主题以包含租户的标识符,例如tenant1:messages:123
,但是现在主题中有两个变量,因此您无法匹配类似tenant_id <> ":messages:" <> message_id
. 你可以用一个函数来解决这个问题,但是有很多样板文件。
多租户 websocket 有更好的策略吗?