Node.js,客户端退出后如何保持服务器事件?

标签 node.js tcp p2p

我有一个简单的 p2p 应用程序,但是当我作为另一个对等点或客户端连接并退出时,服务器完全停止。我查看了 connection.setKeepAlive,但它并没有像我想象的那样工作。我只是希望与任何其他对等点的连接在另一个对等点退出时继续存在。

const net = require('net')

const port = 3000
const host = 'localhost'

const server = net.createServer((connection) => {
    console.log('peer connected')
})

server.listen(port, () => {
    console.log('listening for peers')
})

const client = net.createConnection(port, host, () => {
    console.log('connected to peer')
})

最佳答案

在您的脚本中,服务器监听的端口与您用于客户端连接的端口相同,因此应用程序自行调用。

这是一个连接到其对等点并每 2 秒断开连接的脚本:

const net = require('net')

const myPort = 3001
const peerPort = 3002
const host = 'localhost'

const server = net.createServer((connection) => {
    console.log('peer connected')
})

server.listen(myPort, () => {
    console.log('listening for peers')
})


let connectionTest = function() {

    const client = net.createConnection(peerPort, host, () => {
        console.log('connected to peer')
    });
    client.on('close', (err) => {
        console.log("connection closed"); 
    });
    client.on('error', (err) => {
        console.log("error"); 
    });

    //TODO do stuff

    client.end();
    setTimeout(connectionTest, 2000);
}

setTimeout(connectionTest, 3000);

对于每个实例,您都应该更改端口(myPort 和 peerPort)

关于Node.js,客户端退出后如何保持服务器事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48158631/

相关文章:

android - 我们可以将数据从一个 android 设备直接发送到另一个 android 设备 (p2p) 而无需中间的服务器吗?

network-programming - nat遍历: UPnP/IGD vs NAT-PMP

p2p - 完全去中心化的P2P?

node.js - Docker - Node ,找不到 mysql 模块

javascript - Node.js AWS SNS 订阅、确认

tcp - 对于通过本地环回发送的数据包,如何从 tcpdump 获取发送和接收时间戳?

linux - 如何在 LAN Linux 中创建到另一台计算机的 tcp 重定向

python - 如何将对象实例传递给 SocketServer.BaseRequestHandler 实例?

node.js - Nodejs 和 Tomcat 监听相同的端口号,这可能吗

sql - Sequelize Promises - Chaining Promises 和 Bluebird Promise.each、Promise.map、Promise.all 等