簡體   English   中英

Node.js 在退出事件時從工作人員發送消息

[英]Node.js send message from worker on exit event

我有一個 Node 應用程序,它通過fork()創建了許多工作進程來自己執行一些任務。 作為副產品,工作人員會生成以 object 形式執行的操作的快照。 每個工作人員都有一個附加到“退出”事件的事件偵聽器,此時他們通過process.send()將他們的快照發送回父進程。

這是設置的示例:

// parent.js
const exec = require('child_process');

const worker = exec.fork('worker.js', [], {
  stdio: ['pipe', 'pipe', null, 'ipc']
});

worker.on('message', (snapshot) => {
  // Handle the snapshot sent from worker
});
// worker.js
process.on('exit', () => {
  process.send({ /* snapshot data */ })
});
/* Arbitrary task work */

這是父母/工人 IPC 可接受的模式嗎? 具體來說,考慮到exit事件和process.send()的性質,這對在父進程中接收消息的可靠性是否可靠?

beforeExit事件是否更適合這種模式?

在 nodejs 文檔中很清楚,您應該只在退出事件中執行同步操作。 exit事件的文檔摘錄:

偵聽器函數只能執行同步操作。 Node.js 進程將在調用“退出”事件偵聽器后立即退出,從而導致事件循環中仍在排隊的任何其他工作被放棄。

因此,在退出事件中執行異步操作可能是一個廢話,這將取決於內部實現以及它是否需要事件循環才能工作。


您可以在beforeExit事件中執行異步操作,因此您可能應該這樣做。 來自beforeExit文檔的摘錄:

當 Node.js 清空其事件循環並且沒有額外的工作要安排時,會發出“beforeExit”事件。 通常,Node.js 進程會在沒有安排工作時退出,但在 'beforeExit' 事件上注冊的偵聽器可以進行異步調用,從而導致 Node.js 進程繼續。

偵聽器回調 function 使用作為唯一參數傳遞的 process.exitCode 的值調用。

對於導致顯式終止的條件,例如調用 process.exit() 或未捕獲的異常,不會發出 'beforeExit' 事件。

'beforeExit' 不應用作 'exit' 事件的替代,除非打算安排額外的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM