gpt4 book ai didi

angular - 使用 Rxjs 或其他东西监听 Angular 中的数据库数据变化

转载 作者:行者123 更新时间:2023-12-02 17:12:30 25 4
gpt4 key购买 nike

我在后端(node.js)有一个服务,我通过 Angular 订阅它http 客户端服务并且工作正常。对于我的应用程序,有不止一个用户。 这样其他用户就可以更改数据库数据。因此,每当数据库数据发生更改时,我都会立即订阅它们。这样所有用户都可以查看一致的数据,即与数据库数据同步的数据。我在 Angular 服务中使用 RXJS Observables。

最佳答案

在给出答案之前,请注意,满足您的要求说起来容易做起来难。为现有基础设施实现此功能将需要大量工作,如果您确实需要这样做,那么最好在服务器端使用现有框架。

使用 HTTP 的方法

HTTP 不是适合此任务的协议(protocol)。它基于请求/响应,并期望客户端知道何时它想要请求信息。

如果必须使用HTTP我只能想到两种方法。

选项 1: 创建一个永不关闭的 HTTP 请求,即在 Express 中,服务器永远不会发送 res.end() 或类似的内容。此方法还需要自定义 HTTP 客户端,因为默认的 Angular HTTP 客户端希望请求在向订阅者发送任何通知之前结束。但是,如果服务器没有发送数据,浏览器可能会终止请求,因此您必须自己实现 keep-alive。

选项 2:使用“轮询” - 这意味着您不断询问服务器数据是否已更改。这可以在 RxJS 中实现:

interval(1000).pipe
switchMap(() => this.http.get(...)
)

这带来了一个巨大的缺点,即您的服务器(以及您的数据库)必须处理大量请求,并且您的网络流量会增加(尽管只发送小包)。 但是,这对您来说可能是最容易实现的,因为几乎不需要更改任何内容来支持这一点。请注意,如果同时有太多用户,您的服务器和数据库可能会在某个时刻出现故障。

WebSocket 的替代方法

浏览器仅支持这么多协议(protocol),因此满足您要求的解决方案数量有限。一种是WebSocket。它基本上是浏览器上的 TCP 协议(protocol),但允许长期连接,并允许服务器推送数据到客户端。 RxJS 中甚至有一个类,名为 WebSocketSubject

现在,这种方法比任何 HTTP 方法都具有更好的扩展性,但可能需要您重建后端的大部分内容。如果你想更深入地了解这一点,you can start here .

有关数据库的说明

到目前为止我们只讨论了网络通信,但是当然您的数据库还必须支持可观察的 API(轮询方法除外)。您需要查看特定数据库系统的文档以了解是否如此。

关于angular - 使用 Rxjs 或其他东西监听 Angular 中的数据库数据变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54628416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com