メインコンテンツへスキップ

プロセス間通信

@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);