gun - 如何将数据作为对等方放入服务器端的gundb中

标签 gun gundb

我认为服务器中的枪实例也是对等体之一。 但是当我将数据放到服务器上时,对等方无法获取数据。

这是我的简单测试代码。

global.gun.get('servertest').put('yes'); // at server side
gun.get('servertest').once(console.log); // at client side

它打印 undefined 。 请让我知道如何在服务器端使用枪支实例。

最佳答案

在服务器上,运行此命令以实际接受远程连接:

var server = require('http').createServer().listen(8080);
var gun = Gun({web: server});

在客户端上,运行此命令以连接到您的服务器:

var gun = Gun({peers: ["http://server-ip-or-hostname:8080/gun"]})

顺便说一句,即使您建立对等连接来获取数据,您仍然需要处理 undefined,因为 once() 可能会触发多次数据正在传入。

相关链接:


编辑: 为了更明确地说明我上面的旁注——客户端上的 once 回调为非本地数据获取 undefine 实际上是设计使然的。这意味着客户端尚未获得所请求的数据。然而,它会向其对等方请求它,而对等方将尝试回答他们自己可以解决的问题(本地或来自各自的对等方)。这些答案将再次触发回调(我认为如果它们通过了 CRDT 算法)。

在客户端上获取未定义也可能意味着服务器的响应可能已超时,并且 GUN 认为它未得到应答。您可以使用 .once(callback_function, {wait: time_in_miliseconds}) 来延长等待时间。

根据 Hadar 的回答,尝试使用 on() 而不是 once() 来缓解竞争条件,即您的客户端请求数据在你实际编写之前的服务器。获取数据并且不想再更新时,您可以使用 gun.get('servertest').off()

取消订阅

此外,值得注意的是,GUN 实例并非神奇链接;其中两个连接并不意味着它们在任何方面都是一个且相同的。从概念上讲,它们是分布式系统中的对等体,在 GUN 的例子中,这使您能够最终与与之相关的所有限制和权衡保持一致。

关于gun - 如何将数据作为对等方放入服务器端的gundb中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60408502/

相关文章:

javascript - nomsdb 和 gundb 有什么区别

javascript - gunJS 的离线优先功能能走多远?

gun - GUN 中如何进行分页?

javascript - 如何将Gun Server仅用作中继?

firebase - GunDB 存储和 super 对等选项

javascript - Gun 如何在有时断开的 P2P 网络中管理用户

javascript - 如何隔离 Gunjs 数据库?