【问题标题】:Socket.io - Strategy for broadcasting to users of different permission levelsSocket.io - 向不同权限级别的用户广播的策略
【发布时间】:2016-10-31 10:49:44
【问题描述】:

当每个人都可以看到数据时,使用 socket.io 向其他侦听器广播事件和数据是一种直截了当的做法。但是,当每个用户只被允许查看属于他们的数据时,我可以使用一些策略吗?

例如,我们有一个订单系统。在仪表板上,一些用户可以根据他们的访问级别查看所有订单。因此,如果一个用户更新了订单,我可以将该事件广播给所有其他用户,而无需为仪表板上打开的每个窗口检索新数据,对吗?

所以也许一个例子是来自客户端的socket.send('ordersUpdated', data),我认为节点服务器可以捕获它并将数据发送到侦听该ordersUpdated事件的其他套接字。

但是如果用户只能看到自己的订单呢?我不能向他们广播相同的数据,因为这个级别的每个用户只能看到他们自己的数据。如果他们的其中一个订单被可以查看所有订单的用户修改了怎么办?他们的仪表板也需要更新,但他们无法接收相同的广播数据。

我有什么特别的方法可以解决这个问题吗?一个想法,虽然我认为不是一个好的想法,但只是发送一个事件,说明某些内容已更新,这将导致他们从服务器重新获取数据。

为了提供更多细节,我也在使用 Angular 和 Laravel。

【问题讨论】:

  • sockets,在编程级别上,与socket.io 无关...我删除了标签。有关详细信息,请参阅sockets 标签详细信息。

标签: angularjs node.js laravel socket.io


【解决方案1】:

一种可能性是使用聊天室来管理具有给定访问级别的用户组。例如,您可以拥有一系列按权限级别命名的房间。当用户连接到服务器并验证他们是谁时,您可以将他们放在他们所属的任何聊天室中(根据他们的权限级别)。最高级别的权限(允许查看所有订单)可能称为“all_orders”。

然后,当订单发生更改时,您将其广播给 all_orders 中的所有人以及与更改一致的任何其他聊天室。您还将通知与订单直接关联的用户。

使用聊天室的优势在于您使用内置的 socket.io 方案来跟踪用户组并向他们广播。您的服务器代码仍然有责任确定应该通知哪组用户关于给定的订单,但是 socket.io 将管理管理一组用户并向他们广播的机制。使用聊天室的另一个好处是当用户断开连接时,socket.io 会自动从所有关联的聊天室中删除该套接字。如果您对组使用自己的数据结构,则必须在连接时删除给定的套接字以避免内存泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2012-07-14
    • 2020-12-14
    • 2020-08-11
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多