Node.js
当事件循环为空时程序终止。如果我使用http
模块并创建一个服务器,没有任何回调添加到事件循环中,程序终止:
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 文档,它在第一行显示:
Begin接受指定端口和主机名上的连接...
and:
该函数是异步的。绑定服务器后,
将发出“正在监听”事件...
这本身不足以回答你的问题。那么让我们看一下代码。
The 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)
这是对以下内容的回调:
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 检测到错误或其他停止条件,否则它将继续运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)