簡體   English   中英

Server.close() 沒有停止

[英]Server.close() not stoping

下面是我寫的一個簡單代碼:-


var http = require('http');
var server = http.createServer(function (req,res) {
  res.end("Hello World") 
})

server.listen(5000);



setTimeout(() => {server.close() } ,4000);   // put anytime duration here 

我期望的行為是服務器應該保持 4 秒然后關閉。 但是發生的事情是服務器無限期地保持打開狀態,我們可以做任何事情,但是當我們讓服務器空閑 4 秒時,之后如果我們重新加載或做任何事情,5 秒的計時器就會啟動,然后服務器關閉。 意味着從 0 到 n 秒我一直在工作,然后閑置 4 秒,在第 24 秒我再次重新加載,然后在第 29 秒服務器關閉。

為什么會這樣。 基本上 settimeout 將在 5 秒后移動到調用隊列,然后它應該通過事件循環移動到調用堆棧並在服務器空閑時立即關閉服務器。我們可以在超時中放置任何持續時間我們必須等待讓服務器空閑一段時間settimeout 開始,5 秒后關閉它。 為什么會這樣?

我預計服務器將在 4 秒后關閉,但事實並非如此。

問題在於setTimeout是非阻塞的,不會等待服務器在關閉之前完成對任何請求的處理。 這意味着即使server.close()在 5 秒后被調用,服務器仍會繼續處理當時已經在進行中的任何請求。 要確保服務器在 5 秒后關閉,無論是否有任何活動請求,您可以在調用setTimeout之前使用server.unref()方法。 這個方法告訴 node.js 不要讓事件循環只為服務器運行,這樣它就可以在沒有其他事件要處理時立即關閉。

server.unref();
setTimeout(() => {server.close() } ,5000);

暫無
暫無

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

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