プロセス間通信
@php-wasm/webは、Comlinkライブラリを使用して、JavaScriptで利用可能な一方向のpostMessageを双方向の通信チャネルに変換します。
もし postMessage という言葉に馴染みがなければ、これはJavaScriptのスレッド同士が通信するために使う機能です。先に進む前に、MDN Docs を確認しておいてください。
デフォルトでは、postMessage にはリクエストとレスポンスの仕組みが備わっていません。別のスレッドへメッセージを送ることも、そこから独立してメッセージを受け取ることもできますが、メッセージを送信してその特定のメッセージに対する返信を待つことはできません。
Comlinkライブラリのドキュメントを引用すると、以下のようになります。
main.js
import * as Comlink from 'https://unpkg.com/comlink/dist/esm/comlink.mjs';
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);