Node.js - tcp服务器关闭事件处理程序不起作用

时间:2014-03-10 17:18:04

标签: node.js

为什么同时调用结束事件处理程序(套接字)和关闭事件处理程序(服务器)? 我期待在30秒后调用close事件处理程序。

有人可以帮帮我吗?

虽然30秒后我的TCP服务器不接受任何新连接(保持现有连接打开),但我希望在30秒后调用close事件处理程序。 当我强行关闭所有现有的tcp客户端时,调用服务器的close事件处理程序以及socket的结束事件处理程序。

TCP连接已结束
TCP连接已结束
服务器已关闭但它将保持现有连接

var net = require("net");

function getSocketInfo(socketObject){
                    console.log('bytesRead= ' + socketObject.bytesRead);
                    console.log('bytesWritten= ' + socketObject.bytesWritten);
}

var tcpServer = net.createServer({allowHalfOpen:false},function(socketObject){
                socketObject.setEncoding('utf8');
                getSocketInfo(socketObject);
                socketObject.on('data',function(data){
                        console.log('data received');
                        console.log(data);
                        console.log(data.length);
                        socketObject.write('Server Reply: ' + data,'utf8',function(){
                        console.log('data successfully written on socket');
                        });
                        getSocketInfo(socketObject);
                        });

                socketObject.on('end',function(){
                        console.log('TCP connection ended');
                        });
                });

setTimeout(function(){tcpServer.close();},30000);

tcpServer.on('close',function(){ console.log('server closed but it will keep existing connection');});

tcpServer.on('error',function(error){
                console.log(error.code);
                });

tcpServer.listen(8000,function(){
                console.log('TCP server has been bound');
                });

1 个答案:

答案 0 :(得分:0)

我在查看事件部分后得到了答案。

关闭处理程序将在关闭所有EXISTING TCP连接时调用,而不是在关闭方法调用后立即调用。这很奇怪,但根据文档记录,这是正确的行为。

事件:'关闭'#

  

服务器关闭时发出。请注意,如果存在连接,则为此   在所有连接都结束之前不会发出事件。