使用超暖库在连接的服务器之间复制消息



我正在尝试使用server.jsserver1.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 & 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 & connect to peers
announce: false // <--------- don't announce, stops duplicates
})

但我更希望两台服务器都宣布。

我对套接字、stdin或超温有什么误解?

好吧,我在名为example.js的文件中的Hyperwarm的节点模块文件夹中找到了自己的答案

我添加了以下内容:

const {
priority,
status,
retries,
peer,
client
} = details
if (client) process.stdin.pipe(socket)
else socket.pipe(process.stdout)

这解决了我的问题。

相关内容