在 Node.js 中创建 p2p 应用程序的最佳方法是什么?



我想知道如何创建一个p2p应用程序。只有一种方式还是多种方式。我想每个用户都需要创建一个服务器和一个连接,或者创建多个对等体的多个连接。这是准确的还是我需要做一些不同的事情?

下面是我制作的一些代码,最终版本将首先创建服务器,然后询问要连接的对等方的 host:port。我想知道有没有一种方法可以仅使用 net.createConnection() 或其他更简单的方法创建 p2p 应用程序?还是每个用户都必须是自己的服务器?

const net = require('net')
const readline = require('readline')
const host = 'localhost'
const port = 3000
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.on('line', (line) => {
if(line == 'server') {
const server = net.createServer((connection) => {
console.log('peer connected')
/**/
connection.on('data', (data) => {
console.log(data.toString())
})
/**/
rl.on('line', (line) => {
connection.write('server: ' + line)
})
rl.prompt()
/**/
}).listen(port)
}
else if(line == 'client') {
const client = net.createConnection(port, host, () => {
console.log('connected to peer')
/**/
client.on('data', (data) => {
console.log(data.toString())
})
/**/
rl.on('line', (line) => {
client.write('client: ' + line)
})
rl.prompt()
/**/
})
}
}).on('close', () => {
process.exit(0);
})

您的代码在双客户端方案中工作,但您可能已经注意到,对于更多客户端来说,这并不容易。

这是因为您需要多个图层/工具:

  • 具有地址空间的覆盖网络协议,因此每个客户端都能获得 它自己的地址。这些地址将被转换为 IP 地址 通过路由表,这就是为什么它被称为覆盖网络 协议。例如,如果您有 3 位地址空间,则可以有 8 位 独特的客户。我更喜欢客户广泛的地址范围 随机生成自己的 ID。卡德姆利亚就是一个很好的例子。

  • 现在您已经解决了下一个问题的寻址和路由问题 如果网络完全是P2P,那么客户端如何获得初始
    路由表并连接。要解决此问题,您需要一些节点 具有静态 IP 和高可用性,称为引导程序。

    当两个客户端可以找到每个客户端时,您的代码将完成其余的聊天 其他按其在应用地址空间中的唯一地址。通常你 需要加密和一对公钥/私钥。你可以 公钥的哈希作为客户端唯一 ID。

相关内容

最新更新