我正在尝试使用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 & 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)
这解决了我的问题。