正在关闭setTimeout差异中的node.js http服务器
以下node.js程序未退出:正在关闭setTimeout差异中的node.js http服务器,node.js,http,Node.js,Http,以下node.js程序未退出: var http = require('http'); var server = http.createServer(function (req,res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337,'127.0.0.1'); server.close(); 但这一个是: var http = require
var http = require('http');
var server = http.createServer(function (req,res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337,'127.0.0.1');
server.close();
但这一个是:
var http = require('http');
var server = http.createServer(function (req,res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337,'127.0.0.1');
function closeServer() {
server.close();
};
setTimeout(closeServer,1);
没有连接到服务器。有人能解释一下节目之间行为变化的原因吗?我刚刚在node.js版本为0.12.5的Windows 7上尝试过这一点。根据node.js HTTP文档: 。。此函数是异步的 因此,如果您在调用
server.close()
时看到下面的代码,因为server.listen
正在异步执行,那么您正在关闭尚未启动的服务器
var http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(200, {'content-type': 'text/plain'});
res.end('Hello world\n');
});
server.listen(1337, '127.0.0.1', function() {
console.log('server up and running');
});
server.close();
server.on('close', function() {
console.log('closed server');
});
以下是证据,关闭服务器后,服务器已准备就绪:
closed server
server up and running
但是,如果在
server.listen
回调中调用server.close
方法(这意味着服务器已准备就绪),则可以关闭服务器
var http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(200, {'content-type': 'text/plain'});
res.end('Hello world\n');
});
server.listen(1337, '127.0.0.1', function() {
console.log('server up and running');
server.close();
});
server.on('close', function() {
console.log('closed server');
});
输出:
server up and running
closed server
有趣的。。。我相信如果您将延迟1替换为0,它的行为将相同?我尝试了您的第一个示例,它抛出错误并关闭。您没有收到错误?它在版本0.10上出错,但在版本0上侦听。12@hassansin在第一个示例中,我没有得到抛出/错误。它只是无限期地侦听和处理请求。将延迟1替换为0没有任何区别:即它仍然退出程序。回答得很好。感谢您提高我对node.js的理解。@PeteUK我很高兴它帮助了您,没问题!