RethinkDB - 如何将数据流传输到浏览器



上下文

问候

有一天,我随机发现了RethinkDB,我对整个实时变化非常着迷。为了学习如何使用这个工具,我快速启动了一个运行RethinkDB的容器,并开始制作一个小项目。我想做一些非常简单的事情,因此我想创建一个服务,让演讲者可以创造空间,观众可以提问。其他用户可以对问题投赞成票,以便让演讲者知道哪一个是最好的。显然,这个项目有很多实时需求,我相信使用RethinkDB可以最好地满足这些需求。

设计

我想为此使用一组不同的特定工具。后端将在Laravel Lumen中制作,前端在Vue中.JS数据库当然是RethinkDB。

问题所在

RethinkDB似乎不是为了直接向最终用户公开而设计的,尽管不存在安全问题。

假设用户只需要实时查看问题和点赞,则不需要写入权限,如果用户更改了房间ID,则不会发生任何不良情况,因为这些房间都可以公开访问。

因此,需要一些东西来等待数据更新并通过套接字将其推送到客户端(例如 socket.io 或推送器)。

鉴于后端是用PHP编写的,我无法告诉Lumen保持清醒并等待数据更新。从我从在线教程中看到的情况来看,应该使用一个辅助系统,该系统应该侦听更改,然后推送它们。(例如一个节点.js服务)

这是可以理解的,但我坚信这种将数据传输给用户的方式效率低下,并且违背了RethinkDB的目的。

如果我必须从客户端的计算机发送操作(用户提出问题),将其保存到数据库,有一个侦听更改的脚本,然后将更改推送到 socket.io,最后让客户端(vue.js)在新事件到达时采取行动,首先拥有实时数据库有什么意义?

我可以通过让 Lumen 应用程序将事件直接推送到 socket.io 并改用任何其他数据库系统来避免所有这些头痛。

我真的无法理解这一切的意义。我对 no-sql 数据库没有任何经验,但我真的很想尝试它们。

谢谢。

这是可以理解的,但我坚信这种将数据传输给用户的方式效率低下,并且违背了RethinkDB的目的。

RethinkDB没有内置的机制来将数据传输到最终用户。它也没有访问控制(传统意义上的)。就像你说的,常见的方法是启动运行 socket.io 的一个或多个节点实例。在每个实例上,您都可以收听RethinkDB更改流并使用socket.io的广播功能。这是一种常见的方法,但由于 RethinkDB 的流经过了优化,您还可以为每个传入的 socket.io 连接打开一个更改流。

相关内容

最新更新