2014-09-23 69 views
2

我有一個應用程序需要運行一個非常長的進程(每個請求需要30-60秒)。處理完成後,結果作爲響應返回到請求。這在本地工作正常,但它崩潰了我的Heroku實例。在Heroku和node.js的每個請求上運行的後臺作業

我想什麼,而不是發生的是:

  • 用戶來到現場,要求發送到後端
  • 後端立即返回,並揭開序幕另一個進程/任務/作業,做了處理
  • 處理結束後,響應返回給正確的用戶。

我不確定我需要什麼。基於一個小時的研究,似乎我可以使用Redis作爲隊列,並且工作人員可以每x分鐘輪詢一次。但我不明白的是如何確定處理結束後發送響應的請求。

是否有示例Express/node.js?任何指針都很有幫助。

回答

1

就像您在研究中發現的那樣,使用Redis設置工作隊列對於長時間運行的進程來說是一個很好的方法。一個不錯的圖書館是kue (https://github.com/learnboost/kue)

當談到響應與工作結果的請求,有一個outanding請求掛起等待響應是不是一個好辦法去做(並且可能不工作,heroku殺死閒置的請求一段時間)。

你可以做的是什麼時候發出請求,啓動後臺作業並立即以作業ID迴應請求。然後,客戶端可以輪詢服務器以查找作業的狀態,當作業完成時,它可以獲取所需的結果。

+1

'kue'不好。我還沒有找到任何nodejs的好解決方案,所以最好編寫自己的隊列管理器。 – 2016-11-01 08:09:32