0

我已经设置了一个简单的 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 台不同的本地网络机器上运行该应用程序,它运行良好。数据库正在同步。

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

当新的对等点连接时,有没有办法与更新的数据库同步?

我希望一切都说得通。请建议这是否是错误的方法。

4

1 回答 1

2

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

如果我理解你的问题是正确的,那是你想要同步旧数据吗?

  1. gun.get('hello').put(data).on(cb) 更新同一个对象。所以从技术上讲,你正在同步整个数据库,你总是得到最新的状态。(除非有其他错误?请告诉我)。
  2. 您可能想要做的是.set(data)代替.put(,这将在 上的表​​中添加一条新记录hello,然后您可以使用它查询所有记录(将来的旧插入和实时插入)gun.get('hello').map().on(cb)

我不知道这是否相关,但您可能会发现https://gun.eco/docs/Graph-Guide很好地介绍了put/set等。

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

如果有错误,请在https://github.com/amark/gun/issues报告

于 2019-10-31T23:58:46.057 回答