← Cloudflare Workers / workers / runtime-apis
MessageChannel
Контекст
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 можно отправлять через порт.
Различия
Существует ряд ключевых ограничений MessageChannel API в Workers:
- В настоящее время списки передачи не поддерживаются. Это означает, что вы не сможете передать
право собственности на такие объекты, как
ArrayBufferилиMessagePortмежду портами. -
MessagePortпока не поддается сериализации. Это означает, что нельзя отправитьMessagePortобъект черезpostMessageметод или через вызовы JSRPC. -
'messageerror'событие поддерживается только частично. Если'onmessage'обработчик выбрасывает ошибку,'messageerror'событие будет вызвано, однако оно не будет вызвано при возникновении ошибок сериализации или десериализации данных сообщения. Вместо этого ошибка будет выброшена при возникновенииpostMessageметод вызывается на отправляющем порте. -
'close'событие создаётся на обоих портах, когда один из портов закрывается, однако оно не создаётся при завершении работы Worker или при удалении одного из портов сборщиком мусора.