【问题标题】:RethinkDB - How to stream data to the browserRethinkDB - 如何将数据流式传输到浏览器
【发布时间】:2018-04-23 17:01:03
【问题描述】:

上下文

您好,

有一天,我偶然发现了 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 数据库没有任何经验,但我真的很想尝试一下。

谢谢。

【问题讨论】:

    标签: nosql real-time rethinkdb


    【解决方案1】:

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

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

    【讨论】:

    • Thaaaaaaaaaaaaaaank 你太棒了,你救了我的一天兄弟(RethinkDB 没有内置机制来将数据传输给最终用户),我是多么愚蠢,这应该是显而易见的从一开始。
    • 是的,这也让我措手不及。看看 PouchDB / CouchDB(可选用 RxDB)。
    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 2013-04-18
    • 2010-09-14
    • 2011-05-05
    • 2019-09-25
    • 2012-02-17
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多