2013-04-14 60 views
2

我的NodeJS項目有一些長時間運行的任務,我正在構建一個RESTful接口。在NodeJS中測試長時間運行的任務

我想測試一下,我的REST接口可以繼續訪問,在執行較長時間的運行任務時提供狀態更新。

在多線程環境中,這很容易測試,因爲您只需將一個線程休眠一段時間,因爲您的HTTP控制器在另一個線程中運行。這顯然是不可能在NodeJS(由於單線程):)

我可以將任務,但我怎麼讓存根「等待」一段時間沒有阻塞線程,讓我可以擊中REST端點並獲取狀態更新?

回答

4

假設您指的是CPU綁定的長時間運行任務。

解決這個問題的最好方法是將CPU綁定任務發送到子進程。您可以使用child_process包。

隨着child_process你可以產生新的進程,並通過管道與他們溝通。讓你的孩子進程期待stdin上的數據並將結果寫入標準輸出。

當您的節點進程繼續提供網絡請求時,它可以在另一個進程中產生所有CPU綁定任務。

你也應該看看worker-farm包。

+0

簡而言之,主節點進程中長時間運行的任務不是事件循環的朋友。 –

+0

工人農場拯救我的一天! TNX! – mimmuz