【问题标题】:Node.js, how to keep server alive after a client exits?Node.js,如何在客户端退出后保持服务器活动?
【发布时间】:2018-01-09 08:11:48
【问题描述】:

我有一个简单的 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')
})

【问题讨论】:

  • Keepalive 并没有像你想象的那样做。
  • 当一个对等方断开连接时,这不应该影响与任何其他对等方的连接,并且您显示的代码中没有任何内容会导致这种情况。因此,尚不清楚您实际上要解决什么问题。从 node.js 的角度来看,只要您有任何打开的 TCP 连接或任何侦听服务器,node.js 进程就会保持活动状态。因此,只要您的服务器仍在侦听并处于活动状态,无论您拥有的客户端连接发生什么情况,您的 node.js 进程都会继续运行(而不是退出)。如果您认为自己的经历与此相反,那么我们需要更多细节。
  • 为了测试这一点,我运行此代码,然后从另一个脚本运行常规客户端,它可以正常连接到它,但是当我退出客户端时,节点也会停止。

标签: node.js tcp p2p


【解决方案1】:

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

这是一个脚本,它每 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)

【讨论】:

  • 对不起,这不起作用,这是一个 p2p 应用程序,用户需要成为服务器和客户端。我希望连接保持不变,而不是在执行任务后退出。
  • 抱歉,我错过了“p2p”部分
  • 谢谢,这会很好用!我必须通过为节点添加一些聊天功能来测试它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 2014-12-10
  • 2013-07-20
  • 2018-11-27
  • 2016-06-05
  • 1970-01-01
  • 2018-06-17
相关资源
最近更新 更多