#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)
Что решило мою проблему.