1

我正在尝试使用close eventNode.js。我对 Node.js 很陌生,所以我不确定这是一个体面的问题还是一个可悲的问题。

文档close eventhttp ://nodejs.org/api/http.html#http_event_close_2

如果浏览器在到达之前关闭,我想向控制台输出一条消息end event

在服务器运行到 15 秒之前,我尝试关闭浏览器并通过 Chrome 工具终止该进程。没有消息输出到控制台,如果我通过使用其他窗口访问 localhost:8080 打开其他连接,我很快就会得到一个“你好”,表明我的节点服务器认为至少有两个连接。

我要么不了解如何在 Chrome 中终止进程,要么不了解事件关闭的工作方式。

或者如果EndClose相同 - node.js https 没有响应“结束”事件,而是“关闭”?- 为什么不是我的“他们不耐烦了!” 消息仍然在控制台中输出?

如果进程在事件结束之前结束,你如何输出到控制台?

var http = require('http'),
    userRequests = 0;


http.createServer(function(request,response){
userRequests++;

response.writeHead(200, {'Content-Type' : 'text/plain'});

if ( userRequests == 1 ){

    response.write('1st \n');
    setTimeout ( function() {
        response.write('2nd Thanks for waiting. \n');
        response.on('close', function() {

            console.log("They got impatient!");

        });
        response.end();
    }, 15000);
    response.write('3rd \n');
}
else {
    // Quick response for all connections after first user
    response.write('Hello');
    response.end();
}
}).listen(8080, function() {
console.log('Server start');
});

谢谢你。

4

1 回答 1

2

首先 - 将关闭消息的事件处理程序移到超时函数之外 - 在超时到期之前,您不会连接关闭处理程序,并且可能会错过事件。

其次,您永远不会在任何地方减少 userRequests;userRequests--;某处不应该有一条线吗?这会打破你的逻辑,因为它总是看起来有不止一个请求。

于 2013-04-16T21:25:49.423 回答