簡體   English   中英

`server.listen()`如何保持節點程序的運行

[英]How does `server.listen()` keep the node program running

當事件循環為空時, 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文檔,請在第一行說明:

開始接受指定端口和主機名上的連接...

和:

這個函數是異步的。 服務器綁定后,將發出'listening'事件...

這本身不足以回答你的問題。 那么讓我們來看看代碼。

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檢測到錯誤或其他一些停止條件,否則它將繼續運行。

這里的“答案”實際上並沒有回答這個問題。 真正的解釋是refs,Node的事件循環用於跟蹤異步操作以及它是否可以關閉進程。

這里更詳細地回答: https//stackoverflow.com/a/51571024/8182008

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM