MessageChannel, MessagePort и MessageEvent обеспечивают обмен сообщениями в пределах
одного realm. Эти возможности не создают границы воркера.
MessageChannel и MessagePort
const channel = new MessageChannel();
channel.port2.onmessage = (event) => {
console.log(event.data);
};
channel.port1.postMessage({ hello: "world" });
// handler runs synchronouslyКанал создаёт два связанных порта. MessagePort нельзя создать
напрямую.
postMessage(value, transfer?)отправляет партнёру копию значения.- Сообщения буферизуются, пока принимающий порт не запущен.
- Присваивание
onmessageзапускает порт. start()выдаёт буферизованные сообщения.close()разъединяет пару и отбрасывает сообщения в очереди.- Доступны
onmessage,onmessageerrorиonclose.
Поведение клонирования
Примитивные значения, массивы, простые объекты, циклические ссылки, значения Date, RegExp, Map,
Set и ArrayBuffer копируются с сохранением их типов JavaScript
и содержимого. Функции сразу отклоняются с DataCloneError.
MessageEvent
MessageEvent расширяет Event и предоставляет data, origin,
lastEventId, source и ports. Устаревший метод
initMessageEvent() также доступен.
Ограничения жизненного цикла воркеров описаны в разделе node:worker_threads.
Reference
Status: Partial · Not measured
Exports
| Export | Kind | Status | Notes |
|---|---|---|---|
MessageEvent | class | Partial | missing WindowProxy and ServiceWorker as MessageEventSource (non-browser). data, origin, lastEventId, source, ports, initMessageEvent() |
MessageChannel | class | Partial | missing WindowProxy and ServiceWorker as MessageEventSource (non-browser). port1, port2 |
MessagePort | class | Partial | missing WindowProxy and ServiceWorker as MessageEventSource (non-browser). postMessage(), start(), close(), onclose, onmessage, onmessageerror |