`server.listen()`如何保持节点程序运行
Node.js
程序在事件循环为空时被终止。 如果我使用http
模块创build一个没有任何callback的服务器被添加到事件循环,程序终止:
const http = require('http'); const server = http.createServer();
但是,如果我添加listen
,程序将继续运行:
const http = require('http'); const server = http.createServer(); server.listen(5155);
那么,即使我不向事件循环添加任何东西, listen
方法如何使进程继续运行? 它是否增加了一些事件循环? 它如何与它交互?
这里有两件事情:
如果你看看关于server.listen(…)的Node.js文档,它在第一行说:
开始接受指定端口和主机名的连接…
和:
这个function是asynchronous的。 当服务器已被绑定,“聆听”事件将被发射…
这本身不足以回答你的问题。 那么让我们来看一下代码。
listen()
方法( https://github.com/nodejs/node/blob/master/lib/net.js#L1292 )最终调用self._listen2()
方法。 在最后一行:
process.nextTick(emitListeningNT, this);
( https://github.com/nodejs/node/blob/master/lib/net.js#L1276 )
这是一个callback:
function emitListeningNT(self) { // ensure handle hasn't closed if (self._handle) self.emit('listening'); }
( https://github.com/nodejs/node/blob/master/lib/net.js#L1285 )。
这样,除非node.js检测到错误或其他停止条件,它将继续运行。