运行时包管理器打包器测试运行器代码检查格式化指南参考博客反馈

派生子进程并使用 IPC 通信

使用 Bun.spawn() 来派生子进程。在派生第二个 bun 进程时,你可以在两个进程之间打开直接的进程间通信(IPC)通道。

parent.ts
const child = Bun.spawn(["bun", "child.ts"], {
  ipc(message) {
    /**
     * 从子进程接收到的消息
     **/
  },
});

父进程通过返回的 Subprocess 实例上的 .send() 方法向子进程发送消息。ipc 处理程序还会将子进程作为其第二个参数接收。

parent.ts
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 相同。

child.ts
process.send("来自子进程的字符串消息");
process.send({ message: "来自子进程的对象消息" });

process.on("message", message => {
  // 打印来自父进程的消息
  console.log(message);
});

默认情况下,Bun 使用 JSC serialize API 序列化消息。此 API 支持 structuredClone 支持的所有内容,包括字符串、类型化数组和对象。此 API 不支持转移对象的所有权。

child.ts
// 发送字符串
process.send("来自子进程的字符串消息");

// 发送对象
process.send({ message: "来自子进程的对象消息" });

请参阅子进程。