跳转到内容
搜索文档

MessageChannel

最后更新 查看 MarkdownAgent 设置

背景

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)。这意味着您无法通过端口转移 ArrayBufferMessagePort 等对象的所有权。
  • MessagePort 尚不可序列化。这意味着您无法通过 postMessage 方法或 JSRPC 调用发送 MessagePort 对象。
  • 'messageerror' 事件仅部分支持。如果 'onmessage' 处理程序抛出错误,会触发 'messageerror' 事件,但在序列化或反序列化消息数据出错时不会触发。相反,错误会在发送端口的 postMessage 方法被调用时抛出。
  • 当其中一个端口关闭时,两个端口都会发出 'close' 事件,但在 Worker 终止或其中一个端口被垃圾回收时不会发出。

这篇文档对您有帮助吗?