Nodejs什么时候退出?

Qia*_*hen 7 node.js

运行所有代码后,一行简单的节点程序会立即退出:

console.log('hello');
Run Code Online (Sandbox Code Playgroud)

但是,在执行所有代码后,侦听端口的http服务器程序不会退出:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,是什么造就了这个差异?是什么让第一个程序在执行所有代码后退出,而第二个程序继续存在?

我在Java中理解,规范说当最后一个非守护进程线程退出时,JVM退出.那么,nodejs世界的机制是什么?

Jon*_*ski 10

[...]是什么造成了这种差异?是什么让第一个程序在执行所有代码后退出,而第二个程序继续存在?

第二个节目.listen()编辑.

节点的机制是事件循环,node进程通常在以下情况下退出:

  • 事件循环的队列为空.
  • 没有能够添加到队列的后台/异步任务.

.listen()建立一个无限期能够添加到队列的持久性任务.也就是说,直到它的.close()d或终止处理.

延长第一个应用程序的一个简单示例是向其添加一个计时器:

setTimeout(function () {
    console.log('hello');
}, 10000);
Run Code Online (Sandbox Code Playgroud)

对于该应用程序的大部分运行时,事件队列将为空.但是,计时器将在后台/异步运行,在将回调添加到队列之前等待10秒,以便'hello'记录.之后,在完成计时器的情况下,满足两个条件并退出该过程.