2015-11-26 161 views
1

我有一個節點服務器,這需要:有沒有辦法在子進程中運行節點任務?

  1. 即成網頁
  2. 繼續查詢外部REST API和數據保存到數據庫,並將數據發送到客戶端從REST API某些更新。

任務1僅僅是一個正常的節點任務。但我不知道如何執行任務2.這個任務不會暴露任何接口到外面。這更像是一個背景任務。

任何人可以建議?謝謝。

回答

1

爲了使運行在同一時間爲第二的Node.js應用你的第一個,你可以創建另一個node.js應用程序,然後從第一個使用child_process.spawn()運行它。它可以定期查詢外部REST API並根據需要更新數據庫。

的部分約「從REST API將數據發送到客戶的某些更新」不是那麼清楚你想要做什麼。

如果您使用socket.io將數據發送到連接的瀏覽器,那麼瀏覽器必須連接到我相信是你的第一個Node.js的過程中您的Web服務器。要讓第二個node.js進程使數據通過第一個node.js進程中的socket.io連接發送,您需要一些進程間通信方式。您可以通過child_process.spawn()使用標準輸出和標準輸入,您可以在數據庫中使用某些功能,或使用其他幾種IPC方法中的任何一種。

因爲查詢一個REST API和更新數據庫都是異步操作,他們不花太大的node.js的過程的CPU的。因此,您不必在另一個node.js進程中執行這些操作。你可能只是有一個setInterval()在主node.js的過程,在一段時間查詢API每一次,更新的結果在收到時數據庫,然後就可以直接訪問socket.io連接將數據發送到客戶端,而不必使用一個獨立的進程和某種IPC機制。

+0

我打算使用socket.io將數據發送到客戶端(網頁)。 –

+0

@bagusflyer - 如果您使用socket.io向已連接的瀏覽器發送數據,我在回答中添加了一些信息。 – jfriend00

+0

謝謝@ jfriend00,很好的建議。 –

1

任務1: 快車是完成此任務的好方法。 您可以探索: http://expressjs.com/

任務2:

如果您正在使用Expressjs完成。然後你可以在Express Framework中編寫你的邏輯。 那麼這個任務可以與節點模塊forever來完成。它是一個可以永久運行你的後臺腳本的簡單工具。您可以使用永久連續運行的腳本(無論是寫在node.js中與否)

看一看:
https://github.com/foreverjs/forever

+0

是否有可能在相同的節點應用程序內運行此任務? –

+0

我不明白永遠是多麼的回答這個問題。永遠是一個保持進程運行的工具,如果它崩潰,它會自動重啓。這不是做OP的問題的工具。 – jfriend00

+0

@bagusflyer如果你是在同一個節點的應用程序。根據您的要求,您需要在服務器上安裝** cron job **設置。 – Junaid

相關問題