新对等连接时如何同步 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 很高兴本地多播同步正常工作!
如果我没看错你的问题,你是想同步旧数据吗?
gun.get('hello').put(data)
和.on(cb)
更新同一个对象。所以从技术上讲,您正在同步整个数据库,您只是始终获得最新状态。 (除非有其他错误?请告诉我)。
- 您可能想要做的是
.set(data)
而不是 .put(
,这会将新记录添加到 hello
上的 table,然后您可以查询该记录gun.get('hello').map().on(cb)
所有这些(将来的旧的和实时的插入)
我不知道这是否相关,但您可能会发现 https://gun.eco/docs/Graph-Guide 对 put
/set
等的一个很好的介绍
当然,如果您需要任何帮助,http://chat.gun.eco 聊天室有一个超级友好和活跃的社区!
If there is a bug, please report it at https://github.com/amark/gun/issues
我已经设置了一个简单的 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 很高兴本地多播同步正常工作!
如果我没看错你的问题,你是想同步旧数据吗?
gun.get('hello').put(data)
和.on(cb)
更新同一个对象。所以从技术上讲,您正在同步整个数据库,您只是始终获得最新状态。 (除非有其他错误?请告诉我)。- 您可能想要做的是
.set(data)
而不是.put(
,这会将新记录添加到hello
上的 table,然后您可以查询该记录gun.get('hello').map().on(cb)
所有这些(将来的旧的和实时的插入)
我不知道这是否相关,但您可能会发现 https://gun.eco/docs/Graph-Guide 对 put
/set
等的一个很好的介绍
当然,如果您需要任何帮助,http://chat.gun.eco 聊天室有一个超级友好和活跃的社区!
If there is a bug, please report it at https://github.com/amark/gun/issues