所以我开始使用 Redis 和 Socket.io 向客户端广播事件。我在后端使用 Laravel,并将利用它们的事件功能。
根据用户的访问级别,我只希望他们收听某些频道。我想我可以动态设置他们要收听的频道,但我担心他们是否可以使用调试工具或其他工具来更改他们正在收听的频道。
例如,页面可能会加载监听“频道 100”,但他们可以更改代码以便它可以收听任何其他频道,例如“频道 110”吗?
所以我开始使用 Redis 和 Socket.io 向客户端广播事件。我在后端使用 Laravel,并将利用它们的事件功能。
根据用户的访问级别,我只希望他们收听某些频道。我想我可以动态设置他们要收听的频道,但我担心他们是否可以使用调试工具或其他工具来更改他们正在收听的频道。
例如,页面可能会加载监听“频道 100”,但他们可以更改代码以便它可以收听任何其他频道,例如“频道 110”吗?
我不确定我能否专门为 Socket.io 提供帮助,但我可以告诉你我们是如何在实时系统中解决这个问题的,这可能适用于你的问题。
客户端可以请求附加到频道,因此与您的建议相反,即客户端决定他们听什么,服务器不决定。查看通道如何附加。
现在,为了解决您对哪些客户端可以访问哪些频道的担忧,您的 Laravel 应用程序应该发布一个令牌来指定它拥有的权限。由于您的 Laravel 应用程序负责身份管理并知道用户是谁,因此它始终处于最佳位置,随时掌握最新信息。因此,您的客户端应该从您的 Laravel 应用程序请求一个令牌,该令牌传递给您的 Socket.io 服务器,然后它应该应用规则来允许/禁止请求加入这些频道。这样,您的 Socket.io 服务器不需要从您的系统中嵌入任何业务逻辑,并且在您的应用程序中发布令牌很容易。
我意识到这不是一个直接的答案,但我希望它可以帮助您从架构上思考它。
马特,联合创始人,Ably:只是更好的实时性