簡體   English   中英

nodejs http 模塊中的 response.write 是否阻塞?

[英]is response.write in nodejs http module blocking?

當我用一個大字符串(比如 150 毫秒)調用 expressjs 響應 object 的 response.write 方法時,我看到了漫長的等待。 我想知道它是否確實阻塞了主線程,如果是,我們如何避免這種情況。

請注意,我不能使用 res.send,因為我稍后會在我的代碼中編寫一些其他塊。

示例代碼:

router.get('/*', async (req, res) => {
  const str = "some big string like 256KB"
  res.write(str) // this seems to take 150 ms to go to the next line.
})

res.write()最終使用stream.write()並且在技術上沒有阻塞。 它不會等到所有可能的字節都發送完畢后才返回。 它將調用操作系統發送第一個塊,返回所需的時間可能特定於您的操作系統。

如果尚未發送所有字節並且它正在等待 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 上的drain事件,則res.write()的返回值將為false ,然后它才能發送下一個數據塊。 res.write()的可選回調將告訴您何時所有字節都已移交給操作系統。

執行res.write()的 150 毫秒時間很奇怪。 我在 Windows 11 系統上制作了一個 10MB 的字符串並在其上調用res.write() ,它返回需要 5 毫秒,完全發送需要 17 毫秒(如res.write()的回調所示)。 顯然,其中一些因計算機、操作系統和網絡而異,但這遠不及 150 毫秒。

暫無
暫無

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

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