Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在关闭setTimeout差异中的node.js http服务器_Node.js_Http - Fatal编程技术网

正在关闭setTimeout差异中的node.js http服务器

正在关闭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

以下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('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我很高兴它帮助了您,没问题!