Max*_*kyi 4 javascript http node.js
Node.js
当事件循环为空时程序终止。如果我使用http
模块并创建一个没有任何回调添加到事件循环的服务器,程序将终止:
const http = require('http');
const server = http.createServer();
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加listen
,程序会继续运行:
const http = require('http');
const server = http.createServer();
server.listen(5155);
Run Code Online (Sandbox Code Playgroud)
那么listen
即使我不向事件循环添加任何内容,方法如何保持进程运行?它是否为事件循环添加了一些东西?它如何与它互动?
这里有两件事:
如果您查看有关 server.listen(...) 的 Node.js 文档,它在第一行说:
开始接受指定端口和主机名上的连接...
和:
这个函数是异步的。绑定服务器后,将发出 'listening' 事件...
这本身不足以回答您的问题。那么让我们来看看代码。
该listen()
方法(https://github.com/nodejs/node/blob/master/lib/net.js#L1292)最终调用self._listen2()
方法。在最后一行:
process.nextTick(emitListeningNT, this);
Run Code Online (Sandbox Code Playgroud)
( 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');
}
Run Code Online (Sandbox Code Playgroud)
(https://github.com/nodejs/node/blob/master/lib/net.js#L1285)。
这样,除非 node.js 检测到错误或其他一些停止条件,否则它将继续运行。
归档时间: |
|
查看次数: |
1254 次 |
最近记录: |