Node.js
program is terminated when the event loop is empty. If I use http
module and create a server without any callback to be added to event loop, the program is terminated:
const http = require('http');
const server = http.createServer();
However, if I add listen
, the program keeps running:
const http = require('http');
const server = http.createServer();
server.listen(5155);
So how does listen
method keep the process running even if I don't add anything to event loop? Does it adds something to event loop? How does it interact with it?
Two things here:
If you look at the Node.js documentation about server.listen(...) it says on the first line:
and:
This per se is not enough to answer your question. So let's take a look at the code.
The
listen()
method (https://github.com/nodejs/node/blob/master/lib/net.js#L1292) ends up callingself._listen2()
method. There in the last line:(https://github.com/nodejs/node/blob/master/lib/net.js#L1276)
wich is a callback to:
(https://github.com/nodejs/node/blob/master/lib/net.js#L1285).
This way, unless node.js detects an error or some other stop condition it will keep running.
The "answer" here doesn't actually answer the question at all. The real explanation is refs, which Node's event loop uses to keep track of async actions and whether it can or cannot close the process.
Answered here in more detail: https://stackoverflow.com/a/51571024/8182008