多个 angular 客户端如何在与中央服务器失去连接时相互通信?

How can a number of angular clients communicate between themselves even when they lose connection to a central server?

所以场景是这样的... 我在一个组织中有许多不同的用户。每个人在浏览器中都有自己的 AngularJS 应用程序 运行 会话。他们通过本地 LAN 共享 Internet 连接。

我需要他们继续协同工作(数据、通知等),即使他们失去互联网,即服务器端通信。

解决这个问题的最佳架构是什么?

让客户端在没有服务器的情况下直接通信,需要 peer-to-peer 个连接。

如果您的用户正在更新应该反映在数据库中的数据,那么您必须在客户端本地缓存该数据,直到服务器再次可用。但是如果您想首先将该数据发送给其他对等点,那么您需要仔细考虑当服务器恢复时哪个客户端将更新数据库(应该是进行编辑的原始客户端 - 可能不在线)不再 - 或者它应该是第一个建立服务器连接的客户端)。在您的架构中需要考虑很多。

要应对这种情况,您需要 angular service-worker 库,您可以阅读 here

如果您只想 clients/users 进行通信而不需要在数据库中持久保存数据(例如简单的聊天消息),那么您不必担心上述复杂性。

参考 this example which shows how to use simple-peer Angular2 库。

这里提供了一个辅助答案(不适合评论):https://github.com/amark/gun/issues/506

这是: 由于 GUN 可以连接到多个对等点,因此您可以让浏览器连接到局域网上的 outside/external 服务器和对等点 运行。你所要做的就是 npm install gun,然后在局域网内的几台机器上 npm 启动它,然后 hardcode/refresh/update 在浏览器应用程序中的本地 IP(甚至可以使用 GUN 来做到这一点,通过 storing/syncing table 个本地 IP 作为 update/change)

理想情况下,我们都将使用 WebRTC 并让我们的浏览器直接相互连接。这是可能的,但有一个大问题,每次刷新浏览器时,WebRTC 都依赖于 relay/signal 服务器。这有点愚蠢,是 browser/WebRTC 的错,而不是 GUN(或其他 P2P 系统)。因此,无论哪种方式,您都必须同时执行 (1)。

如果您在同一台计算机上,在同一浏览器中,在同一浏览器会话中,则可以中继更改(尽管我没有为此编写代码,因为这是一种无用的行为)-它不适用于您局域网中的其他机器。

总结:只要你是运行你网络中的一些本地对等点,并且可以在本地访问它们,那么你就可以"offline"(这里的离线指的是external/outside网络)与 GUN 同步。

GUN 也是 offline-first 之处在于,即使 2 台机器真正断开连接,如果他们在离线时进行本地编辑,当机器最终恢复正常时它们也会正确同步 online/reconnect。

希望对您有所帮助。