为什么node server.listen不能返回到shell

节点文件可以描述从服务器到简单的脚本,甚至是只能打印到控制台的东西:

//logger.js console.log('Hello World'); // in the terminal > node logger.js Hello World > 

http包(和其他)如何不提供命令提示给用户; 他们如何保持这个过程活着?

 //server require('http').createServer(function (req, res) { res.end('Hello World'); }).listen(3000); // in the terminal > node server.js // process stays in the foreground, no prompt back 

如果有一个正在监听的套接字,节点将不会退出。 这就是TL,DR的答案。 (关于事件队列的其他答案是正确的,因为这是程序不能退出的一个可能的原因,但是server.listen()并不是这样server.listen()

http.createServer()http.createServer()是(最终)调用server.listen()调用server.listen()会阻止进程退出,因为server.listen()创build一个套接字。 请注意socket.ref()的文档 :

与unref相反,在以前的unfd套接字上调用ref将不会让程序退出,如果它是唯一的套接字(默认行为)。 如果套接字是refd再次调用ref将不起作用。

socket.unref()

在套接字上调用unref将允许程序退出,如果这是事件系统中唯一活动的套接字。 如果套接字已经是unrefd,则再次调用unref将不起作用。

如果你想从那里进入下一个阶段,我相信你需要深入到Node.js / io.js底层的C或C ++。

在事件队列中没有事件的情况下,节点将退出,并且没有后台任务(可以将事件添加到事件队列),这是后者。

@ user2786771是事实。

更详细的解释可以在这篇文章中find。