所以场景是这样的......我在组织中有许多不同的用户。每个人都有自己的AngularJS应用程序会话在他们的浏览器中运行。他们通过本地LAN共享互联网连接。
即使他们失去互联网,即服务器端通信,我也需要他们继续合作(数据,通知等)。
解决这个问题的最佳架构是什么?
让客户端在没有服务器的情况下直接通信需要点对点连接。
如果您的用户正在更新应反映在数据库中的数据,那么您必须在客户端本地缓存该数据,直到服务器再次可用。但是,如果您想首先将该数据发送给其他同行,那么您需要仔细考虑哪个客户端将在服务器恢复时更新数据库(如果它是进行编辑的原始客户端 - 可能不在线 - 或者它应该是第一个建立服务器连接的客户端)。您的架构需要考虑很多。
要应对这种情况,您需要角度服务工作者库,您可以阅读有关here的内容。
如果您只是希望客户端/用户在不保留数据库中的数据的情况下进行通信(例如,简单的聊天消息),那么您不必担心上述复杂性。
请参阅this example,其中显示了如何在Angular2中使用simple-peer库。
这里提供了一个协助答案(不符合评论):https://github.com/amark/gun/issues/506
就是这样:由于GUN可以连接到多个对等体,因此您可以让浏览器连接到局域网上运行的外部/外部服务器和对等体。所有你需要做的就是npm安装枪,然后npm在局域网内的几台机器上启动它,然后在浏览器应用程序中硬编码/刷新/更新他们的本地IP(也许甚至可以通过存储/同步使用GUN来做到这一点)本地IP表作为更新/更改)
理想情况下,我们都会使用WebRTC并让我们的浏览器直接相互连接。这是可能的,但是有一个大问题,每次刷新浏览器时,WebRTC依赖于中继/信号服务器。这有点愚蠢,是浏览器/ WebRTC的错,而不是GUN(或其他P2P系统)。无论哪种方式,你都必须做(1)任何一种方式。
如果你在同一台计算机上,在同一个浏览器中,在同一个浏览器会话中,可以传递更改(虽然我没有为此编码,因为它有点无用的行为) - 它不起作用与您的局域网中的其他机器。
简介:只要您在网络中运行某些本地对等方,并且可以在本地访问它们,那么您可以执行“离线”(此处离线引用外部/外部网络)与GUN同步。
GUN也是离线优先的,即使两台机器真正断开连接,如果它们在离线时进行本地编辑,它们将在机器最终重新联机/重新连接时正确同步。
我希望这有帮助。