Как синхронизировать GUN db при подключении нового пира - PullRequest
0 голосов
/ 15 октября 2019

Я настроил простое приложение node.js в качестве подтверждения концепции, в котором я хочу, чтобы одноранговые узлы в локальной сети синхронизировали базу данных с помощью gun.

Я новичок в 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 разных компьютерах локальной сети, и это работает хорошо. База данных синхронизируется.

Если закрыть одно приложение, затем обновить базу данных в открытом приложении, а затем перезапустить второе приложение, второе приложение не синхронизируется с уже открытым приложением.

Есть ли способ синхронизации с обновленной БД при подключении нового пира?

Я надеюсь, что все имеет смысл. Пожалуйста, предложите, если это неправильный путь.

1 Ответ

1 голос
/ 01 ноября 2019

@ CUGreen Я рад, что локальная многоадресная синхронизация работает!

Если я правильно понимаю ваш вопрос, то вы хотите, чтобы данные OLD синхронизировались?

  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

...