MessageChannel API ↗ 提供在应用程序不同部分之间创建通信通道的方式。
Workers 运行时提供了 MessageChannel API 的最小实现,目前仅限于在单个 Worker 实例内使用。这意味着您可以使用 MessageChannel 在 Worker 的不同部分之间发送消息,但不能跨不同 Worker 发送。
const { port1, port2 } = new MessageChannel();
port2.onmessage = (event) => {
console.log('Received message:', event.data);
};
port2.postMessage('Hello from port2!');任何可与 structuredClone(...) API 一起使用的值都可以通过端口发送。
Workers 中的 MessageChannel API 存在若干关键限制:
- 目前不支持传输列表(transfer lists)。这意味着您无法通过端口转移
ArrayBuffer或MessagePort等对象的所有权。 MessagePort尚不可序列化。这意味着您无法通过postMessage方法或 JSRPC 调用发送MessagePort对象。'messageerror'事件仅部分支持。如果'onmessage'处理程序抛出错误,会触发'messageerror'事件,但在序列化或反序列化消息数据出错时不会触发。相反,错误会在发送端口的postMessage方法被调用时抛出。- 当其中一个端口关闭时,两个端口都会发出
'close'事件,但在 Worker 终止或其中一个端口被垃圾回收时不会发出。