派生子进程并使用 IPC 通信
使用 Bun.spawn() 来派生子进程。在派生第二个 bun 进程时,你可以在两个进程之间打开直接的进程间通信(IPC)通道。
const child = Bun.spawn(["bun", "child.ts"], {
ipc(message) {
/**
* 从子进程接收到的消息
**/
},
});
父进程通过返回的 Subprocess 实例上的 .send() 方法向子进程发送消息。ipc 处理程序还会将子进程作为其第二个参数接收。
const childProc = Bun.spawn(["bun", "child.ts"], {
ipc(message, childProc) {
/**
* 从子进程接收到的消息
**/
childProc.send("回复子进程");
},
});
childProc.send("我是你的父亲"); // 父进程也可以向子进程发送消息
子进程通过 process.send() 向父进程发送消息,并通过 process.on("message") 接收消息。这与 Node.js 中 child_process.fork() 使用的 API 相同。
process.send("来自子进程的字符串消息");
process.send({ message: "来自子进程的对象消息" });
process.on("message", message => {
// 打印来自父进程的消息
console.log(message);
});
默认情况下,Bun 使用 JSC serialize API 序列化消息。此 API 支持 structuredClone 支持的所有内容,包括字符串、类型化数组和对象。此 API 不支持转移对象的所有权。
// 发送字符串
process.send("来自子进程的字符串消息");
// 发送对象
process.send({ message: "来自子进程的对象消息" });
请参阅子进程。