【问题标题】:What is the best way to create a p2p app in Node.js?在 Node.js 中创建 p2p 应用程序的最佳方法是什么?
【发布时间】:2018-04-04 15:13:19
【问题描述】:

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

以下是我编写的一些代码,最终版本将首先创建服务器,然后请求主机:要连接的对等端口。我想知道有没有一种方法可以只使用 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);
})

【问题讨论】:

  • 你可能想看看p2p module
  • p2p模块我已经看过了,这种情况我不想用别人的模块。

标签: node.js p2p


【解决方案1】:

您的代码在两个客户端场景中工作,但您可能已经注意到,如果有更多客户端,这并不容易。

那是因为你需要多个层/工具:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多