使用群集时正确关闭TCP服务器

时间:2014-12-22 13:12:19

标签: node.js

我有以下示例代码,其中我正在分配子进程,启动TCP服务器并在特定超时后关闭服务器。当我在超时后查看TCP连接时,我仍然看到一个连接处于侦听状态。

此服务器上也没有客户端连接,我看到服务器已关闭'事件也在为每个工人开火。

奇怪的是,服务器也接受新的连接。如何在集群环境中完全关闭TCP服务器?

我正在使用节点0.10.31版本。

var net = require('net');

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
} else {

    var server = net.createServer(function(sock) {
        console.log('received connection...');
    });

    server.on('listening', function() {
        console.log('listening....');
        setTimeout(function() {
            server.close();
        }, 5000);
    });

    server.on('close', function() {
        console.log('server closed');
    });

    server.listen('2222', '101.30.33.194');
}

在超时后运行lsof以检查tcp连接:

#lsof -ni -P | grep 2222
node      17228    root   14u  IPv4 440505953      0t0  TCP 101.30.33.194:2222 (LISTEN)

0 个答案:

没有答案