
[英]Is there a way to send a message from a worker to other workers in 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.