为什么同时调用结束事件处理程序(套接字)和关闭事件处理程序(服务器)? 我期待在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');
});
答案 0 :(得分:0)
我在查看事件部分后得到了答案。
关闭处理程序将在关闭所有EXISTING TCP连接时调用,而不是在关闭方法调用后立即调用。这很奇怪,但根据文档记录,这是正确的行为。
事件:'关闭'#
服务器关闭时发出。请注意,如果存在连接,则为此 在所有连接都结束之前不会发出事件。