Дублирование сообщений между подключенными серверами с использованием библиотеки hyperswarm

#javascript #node.js #sockets #stdin #p2p

#javascript #node.js #розетки #стандартный интерфейс #p2p

Вопрос:

Я пытаюсь отправить сообщение с одного подключенного узла-сервера на другой, используя следующий код в server.js и server1.js :

 const hyperswarm = require('hyperswarm')
const crypto = require('crypto')

const swarm = hyperswarm()

// look for peers listed under this topic
const topic = crypto.createHash('sha256')
  .update('mycoolstuff')
  .digest()

swarm.join(topic, {
  lookup: true, // find amp; connect to peers
  announce: true // optional- announce self as a connection target
})

swarm.on('connection', (socket, details) => {
  //console.log('new connection!', details)

  // you can now use the socket as a stream, eg:
  process.stdin.pipe(socket).pipe(process.stdout)
})
 

Проблема в том, что сообщение с одного терминала дублируется на другой.

Например, если я введу следующее в server.js терминал пользователя:

 test 123
 

Я получаю следующее в server1.js ‘с:

 test 123
test 123
 

… и наоборот

Я могу обойти это, настроив один из двух серверов так, чтобы он не объявлял:

 swarm.join(topic, {
  lookup: true, // find amp; connect to peers
  announce: false // <--------- don't announce, stops duplicates
})
 

Но я бы предпочел, чтобы оба сервера объявили об этом.

Что я неправильно понимаю в отношении сокетов, стандартного интерфейса или hyperswarm?

Ответ №1:

Ну, я нашел свой собственный ответ внутри папки модуля узла для hyperswarm в файле с именем example.js

Я добавил следующее:

   const {
    priority,
    status,
    retries,
    peer,
    client
  } = details

  if (client) process.stdin.pipe(socket)
  else socket.pipe(process.stdout)
 

Что решило мою проблему.