執行環境套件管理器打包器測試執行器程式碼檢查格式化指南參考部落格意見回饋

派生子行程並使用 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: "來自子行程的物件訊息" });

請參閱子行程。