2014-09-04 75 views
0

在nodeJS中,我知道如果我在一些異步調用上轉儲了大量回調,它們將全部放入事件循環並最終解決。我很肯定,基於MDN description of the event loop,,這通常是以FIFO的方式完成的。是否有可能重新排序node.js事件循環?

在我正在處理的應用程序上,我每30分鐘就會轉儲一堆基於一些網頁抓取請求操縱數據庫的異步調用。我不在乎這些是否需要一兩分鐘才能完成,因爲我只會每30分鐘致電一次,這些電話的數量不會改變。

但是,如果用戶在兩分鐘內向服務器發出了GET請求,我寧願讓它們在服務器完成處理所有網頁抓取時不要拖延時間。有沒有辦法將這些用戶請求快速追蹤到事件隊列的前端?

+2

爲什麼你不能運行三個循環 - 一個用於抓取,另一個用於GET請求(主要處理傳入請求和相應路由)? – 2014-09-04 22:14:13

+0

是否需要運行多個服務器,還是有辦法讓單個服務器創建多個事件循環? – ckersch 2014-09-04 22:17:30

+1

根據下面提供的答案 - 確保您瞭解每個事件循環的異步工作方式。如果您希望運行多個事件循環,則需要產生多個服務器(nodejs進程),但只有在需要時纔會這樣做。如果你在一個進程中運行異步作業,它不應該影響你的GET請求(證明抓取作業真的是異步的) – 2014-09-04 22:30:16

回答

3

我想你在這裏有一個誤區:它不是異步調用,而是「放入事件循環並最終解決」。相反,異步調用在後臺運行(而其他事件(如GET請求在事件循環中處理),並且結果返回時,此結果和回調一起放入事件循環中。

所以進來的GET請求無論如何都會立即提供,並且不應該快速跟蹤它。

相關問題