Skip to content

使用 Bun.spawn() 生成子進程。當生成第二個 bun 進程時,你可以在兩個進程之間打開直接的進程間通信 (IPC) 通道。

NOTE

此 API 僅與其他 `bun` 進程兼容。使用 `process.execPath` 獲取當前運行的 `bun` 可執行文件的路徑。
ts
const child = Bun.spawn(["bun", "child.ts"], {
  ipc(message) {
    /**
     * 從子進程接收的消息
     **/
  },
});

父進程可以使用返回的 Subprocess 實例上的 .send() 方法向子進程發送消息。發送子進程的引用也可在 ipc 處理程序的第二個參數中獲得。

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 相同。

ts
process.send("來自子進程的字符串消息");
process.send({ message: "來自子進程的對象消息" });

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

所有消息都使用 JSC serialize API 進行序列化,它允許使用與 postMessagestructuredClone 支持的相同 可傳輸類型,包括字符串、類型化數組、流和對象。

ts
// 發送字符串
process.send("來自子進程的字符串消息");

// 發送對象
process.send({ message: "來自子進程的對象消息" });

請參閱 文檔 > API > 子進程 獲取完整文檔。

Bun學習網由www.bunjs.com.cn整理維護