Skip to content

WorkerSyncer

AutoStoreWorkerSyncer 是专门用于实现主线程与WebWorker/SharedWorker之间`的同步。

基本用法

与普通 Worker 同步

主线程代码:

typescript
import { AutoStore } from "autostore";
import { AutoStoreWorkerSyncer } from "@autostorejs/syncer";

const worker = new Worker("./worker.js", { type: "module" });

const store = new AutoStore({
    count: 0,
    user: { name: "Alice" },
});

const syncer = new AutoStoreWorkerSyncer(store, worker, {
    mode: "pull",
    immediate: true,
    direction: "both",
});

Worker 代码 (worker.js):

typescript
import { AutoStore } from "autostore";
import { AutoStoreWorkerSyncer } from "@autostorejs/syncer";

const store = new AutoStore({
    count: 0,
    user: { name: "Bob" },
});

// self 就是 Worker 全局对象
const syncer = new AutoStoreWorkerSyncer(store, self, {
    mode: "push",
});
loading

演示中主线程与 Worker 内各持一个 Store 双向同步:主线程点击 count++ 后状态同步到 WorkerWorker 内计算 result = count * 2 写回,主线程面板实时显示回写结果——一次修改可以看到双向的数据流动。

与 SharedWorker 同步

主线程代码:

typescript
import { AutoStore } from "autostore";
import { AutoStoreWorkerSyncer } from "@autostorejs/syncer";

const worker = new SharedWorker("./worker.js", {
    type: "module",
    name: "my-worker",
});

const store = new AutoStore({
    count: 0,
    messages: [],
});

const syncer = new AutoStoreWorkerSyncer(store, worker, {
    mode: "pull",
    immediate: true,
    direction: "backward", // 只接收服务端更新
});

SharedWorker 代码 (worker.js):

typescript
import { AutoStore } from "autostore";
import { AutoStoreWorkerSyncer } from "@autostorejs/syncer";

const store = new AutoStore({
    count: 0,
    messages: [],
});

const syncer = new AutoStoreWorkerSyncer(store, self, {
    mode: "push",
});
loading

演示中 SharedWorker 内的 Store 作为权威数据源每秒递增推送,客户端以 direction: 'backward' 只接收更新;同一浏览器的其他标签页会连接到同一个 SharedWorker,因此能看到完全相同的值。

完整示例

参考 packages/syncer/examples/worker-react 中的完整示例。