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",
});

与 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",
});

完整示例

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