在NodeJS應用程序中處理後臺進程的好方法是什麼?Node.js中的後臺進程
方案:用戶發佈內容到一個應用程序我想緊縮的數據,從外部資源請求額外的數據,等等。所有這一切都非常耗時,所以我想它的REQ/RES後循環。理想的做法是隻需要一個可以快速轉儲作業的作業隊列,守護進程或任務運行者將始終使用最舊的作業並對其進行處理。
在RoR我會用類似Delayed Job的方法做到這一點。什麼是該API的節點等值?
在NodeJS應用程序中處理後臺進程的好方法是什麼?Node.js中的後臺進程
方案:用戶發佈內容到一個應用程序我想緊縮的數據,從外部資源請求額外的數據,等等。所有這一切都非常耗時,所以我想它的REQ/RES後循環。理想的做法是隻需要一個可以快速轉儲作業的作業隊列,守護進程或任務運行者將始終使用最舊的作業並對其進行處理。
在RoR我會用類似Delayed Job的方法做到這一點。什麼是該API的節點等值?
如果您想要輕量級的東西,它與服務器在同一進程中運行,我強烈建議Bull。它有一個簡單的API,可以對隊列進行細粒度的控制。
如果您正在尋找可作爲獨立工作人員進程運行的東西,請查看Kue。它可以作爲RESTful API服務器運行,甚至可以爲其編寫幾個前端應用程序。
如果您熟悉Ruby的Resque,有一個叫Node-resque
公牛,苦厄和Node-resque都是由Redis支持節點執行,這是其中的Node.js工人隊列無處不在。所有3個人都能夠完成RoR的DelayedJob所做的事情,這是您想要的特定功能以及您的API首選項的問題。
這是一個非常好的答案,但提到ChildProcess API和[webworker-threads](https://www.npmjs.com/package/webworker-threads)模塊可以讓它變得很棒。 ;) – ssube
@ssube我不同意你。除非你的意思是創建一個查看隊列來運行某個命令的分支,否則你是對的。從我+1。我使用的是Child_process,我的問題是我可以打開一大組進程,但如果我有辦法管理要在隊列中運行的任務,那麼我會很高興CP是一個很好的解決方案。這是可以做到的,但重點是不要自己完成所有的工作,而是要重新使用經過測試的代碼(在這種情況下,Kue可以完成所有你需要的魔法並允許api集成)。 – dewwwald
我建議使用合適的Node.js框架來構建應用程序。
我認爲最強大和最易於使用的是Sails.js。
這是一個MVC框架,所以如果你習慣在ROR中開發,你會發現它非常簡單!
如果您使用它,它已經呈現了一個強大的(以JavaScript形式)作業管理器。
new sails.cronJobs('0 01 01 * * 0', function() {
sails.log.warn("START ListJob");
}, null, true, "Europe/Dublin");
如果您需要更多信息請不要猶豫與我聯繫!
我正在尋找Node的後臺進程管理器。根據定義,這應該與您的網絡應用程序分開。如果您使用Sails,Express,Hapi或其他任何您喜歡的應用程序,則無關緊要。 –
好吧,你可以嘗試Bull或Webworker-Threads ...祝你好運惠特節點.js :) –
它看起來像sails.js是相當大的,比cronJobs做得更多。我找到了node-cron(https://github.com/kelektiv/node-cron),我敢打賭它就是sails.js使用的。 – pbatey
我想建議使用Redis作爲調度工作。它有很多不同的數據結構,你可以選擇一個更適合你的用例。
你提到了RoR和DJ,所以我假設你對sidekiq很熟悉。如果需要,您可以使用node-sidekiq進行作業調度,但是它的次優imo,因爲它的主要目的是將nodejs與RoR集成。
對於工人守護進程我建議使用PM2。它被廣泛使用和積極維護。它解決了很多問題(例如部署,監視,集羣),所以確保它不會對你有所幫助。
這個問題是一個軟件推薦,因爲它現在是措辭,最終會被關閉。如果您要將最後一句替換爲「此API的NodeJS等效物是什麼?」它變得更主題。我希望看到這回答而不是結束,因爲我需要做類似的事情。 – ssube
謝謝,改寫它。 –
下面的好建議。還有'ChildProcess' API可能是有用的。 https://nodejs.org/api/child_process.html – lispHK01