运行所有代码后,一行简单的节点程序会立即退出:
console.log('hello');
但是,在执行所有代码后,侦听端口的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');
解决方法
[…] what made this difference? What made the first program quit after executing all code,while the second program continue to live?
第二个程序.listen()编辑.
节点的机制是event loop,节点进程通常在以下情况下退出:
>事件循环的队列为空.
>没有能够添加到队列的后台/异步任务.
.listen()
建立一个无限期能够添加到队列的持久性任务.也就是说,直到它是.close()
d或该过程终止.
延长第一个应用程序的一个简单例子是add a timer:
setTimeout(function () { console.log('hello'); },10000);
对于该应用程序的大部分运行时,事件队列将为空.但是,计时器将在后台/异步运行,在将回调添加到队列之前等待10秒,以便可以记录“hello”.之后,在完成计时器的情况下,满足两个条件并退出该过程.