Cross-process communication

@php-wasm/web uses the Comlink library to turns the one-way postMessage available in JavaScript into a two-way communication channel.

If postMessage sounds unfamiliar, it’s what JavaScript threads use to communicate. Please review the MDN Docs before continuing.

By default, postMessage does not offer any request/response mechanics. You may send messages to another thread and you may independently receive messages from it, but you can’t send a message and await a response to that specific message.

To quote the Comlink library documentation:

main.js


async function init() { const worker = new Worker('worker.js'); // WebWorkers use `postMessage` and therefore work with Comlink. const obj = Comlink.wrap(worker); alert(`Counter: ${await obj.counter}`); await obj.inc(); alert(`Counter: ${await obj.counter}`); } init();

worker.js

importScripts('https://unpkg.com/comlink/dist/umd/comlink.js');

const obj = {
    counter: 0,
    inc() {
        this.counter++;
    },
};

Comlink.expose(obj);