[英]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.