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

RethinkDB - How to stream data to the browser

上下文

你好,

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

设计

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

问题

尽管不存在安全问题,但 RethinkDB 似乎并未设计为直接暴露给最终用户。

假设用户只需要实时查看问题和点赞,则不需要写入权限,并且如果用户更改了房间 ID,也不会发生什么坏事,因为房间都是公开可访问的。

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

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

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

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

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

我真的不明白这一切的意义所在。我对 no-sql 数据库没有任何经验,但我真的很想用它们进行试验。

谢谢。

This is understandable however i strongly believe that this way of transferring the data to the user is inefficient and it defeats the purpose of RethinkDB.

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