为什么node server.listen不返回shell

yve*_*lem 4 process node.js server

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

//logger.js
console.log('Hello World');

// in the terminal
> node logger.js
Hello World
>
Run Code Online (Sandbox Code Playgroud)

如何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
Run Code Online (Sandbox Code Playgroud)

Tro*_*ott 6

如果有正在侦听的套接字,节点将不会退出.这就是TL; DR答案.(谈论事件队列的其他答案是正确的,因为这可能是程序不能退出的原因,但这不是正在发生的事情server.listen().)

在引擎盖下,http.createServer()(最终)调用server.listen()Calling server.listen()将保持进程退出,因为server.listen()创建了一个套接字.注意从文档为socket.ref():

与unref相反,在先前未刷新的套接字上调用ref将不会让程序退出,如果它是唯一的套接字(默认行为).如果套接字是refd再次调用ref将无效.

而且socket.unref():

如果这是事件系统中唯一的活动套接字,则在套接字上调用unref将允许程序退出.如果套接字已经unfd,则再次调用unref将无效.

如果你想从那里进入下一级别,我相信你需要深入研究Node.js/io.js的C或C++.


小智 5

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