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