【发布时间】:2021-04-19 10:32:45
【问题描述】:
我正在编写一个具有多种用户类型的系统,该系统被授予不同级别的访问权限,以在数据库中创建删除和更新资源。因此,在我看来,这些资源应该实时显示,以便不显示已删除的资源而显示创建的资源。数据越及时,用户体验的问题似乎就越少。
使用 socket.io 我目前正在通过为用户订阅数据源来规避这个问题,他们的权限需要使用命名空间来区分用户类型的能力。我只是为每种数据订阅设置了 JavaScript 间隔,每秒都在数据库中敲击一组新数据,而不考虑数据是否实际更新,然后将其发送回用户应用程序。
这对于测试来说很好,但我一直在努力寻找一种解决方案来防止这种带宽浪费并减少数据库负载。我的一个想法是使用所有组织 ID 作为键填充一个全局对象,并在每个值中放置一个对象,其中每个数据订阅的名称作为键,这些值是最新的数据集。
通过这种方式,我可以将每个新套接字添加到他们加入的房间,并重构数据库查询以确定对每个订阅集的更改,我可以将这些更改作为一系列 socket.io 广播中继到相关的组织房间。
我对这个实现的主要保留是高服务器端内存需求降低可扩展性的可能性,以及如果客户端数据集错过任何这些广播,它们可能会变得不同步。这个解决方案对于生产服务器来说是可以接受的,还是有一个更简单/更好的解决方案,我没有看到从客户端的角度来保持大型数据集的实时性?
谢谢
【问题讨论】:
-
你想建立一个类似于更新足球比赛记分卡的系统吗?我之所以问,是因为它也有实时更新分数的大型数据集。
-
我不熟悉“记分卡”的大小和性质,但如果它是大量数据,那么可以。
标签: node.js reactjs mongodb express socket.io