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

时间:2018-04-09 22:16:08

标签: nosql real-time rethinkdb

上下文

问候,

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

设计

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

问题

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

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

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

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

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

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

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

我真的不明白这一切的重点。无论如何我对没有sql数据库没有经验,但我真的想试验它们。

谢谢。

1 个答案:

答案 0 :(得分:0)

  

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

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