新对等连接时如何同步 GUN 数据库

How to sync GUN db when new peer connects

我已经设置了一个简单的 node.js 应用程序作为概念验证,我希望本地网络上的同行使用 gun 同步数据库。

我是枪手新手,所以我不确定我这样做是否正确,但这是我的代码:

var Gun = require('gun')
const address = require('network-address')
const hashToPort = require('hash-to-port')

// get username from arg eg. node index myname
const username = process.argv[2]

// create GUN server on it's own port
var server = require('http').createServer().listen(hashToPort(username))
var gun = Gun({web: server})

// listen for input from the console
process.stdin.on('data', (data) => {
    gun.get('hello').put({ word: data.toString(), user: username })
});

// Output input update
gun.get('hello').on(function(data, key) {
    console.log(data.user + ' said: ' + data.word.toString())
})

想法是节点可以退出并重新连接并同步到最新版本的数据库。

我 运行 该应用程序在 2 台不同的本地网络机器上运行良好。数据库正在同步。

如果我关闭一个应用程序,然后在打开的应用程序上更新数据库,然后重新启动第二个应用程序,第二个应用程序不会与已经打开的应用程序同步。

有没有办法在新节点连接时与更新后的数据库同步?

我希望一切都有意义。如果这是错误的方法,请提出建议。

@CUGreen 很高兴本地多播同步正常工作!

如果我没看错你的问题,你是想同步旧数据吗?

  1. gun.get('hello').put(data).on(cb)更新同一个对象。所以从技术上讲,您正在同步整个数据库,您只是始终获得最新状态。 (除非有其他错误?请告诉我)。
  2. 您可能想要做的是 .set(data) 而不是 .put(,这会将新记录添加到 hello 上的 table,然后您可以查询该记录gun.get('hello').map().on(cb)
  3. 所有这些(将来的旧的和实时的插入)

我不知道这是否相关,但您可能会发现 https://gun.eco/docs/Graph-Guideput/set 等的一个很好的介绍

当然,如果您需要任何帮助,http://chat.gun.eco 聊天室有一个超级友好和活跃的社区!

If there is a bug, please report it at https://github.com/amark/gun/issues