zustand-sync؛ همگامسازی زندهی استیت بین چند کلاینت
خلاصهٔ کاملتر
تو اپهایی که چند کاربر همزمان با یه داده کار میکنن، همگام نگهداشتن استیت بین کلاینتها دردسر داره. zustand-sync یه میدلور خیلی سبک برای کتابخونهی مدیریت استیت zustand ـه که همین کارو ساده میکنه: هر تغییری تو استیت یه کلاینت بیفته، به بقیه هم میرسه.
به گفتهی سازنده، رازِ کار استاندارد JSON Patch یا همون RFC 6902 ـه. بهجای اینکه کل استیت رد و بدل بشه، فقط «تفاوت» بین استیت قدیم و جدید بهشکل یه پچ کوچیک حساب میشه و روی لایهی انتقال فرستاده میشه. سمت مقابل هم همون پچ رو روی استیت خودش اعمال میکنه.
استفادهش هم راحته؛ کافیه syncStoreMiddleware رو دور استور بپیچی و یه ترنسپورت مثل وبسوکت بهش بدی:
export const useExampleStore = create(
syncStoreMiddleware(
(set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
}),
{ transport: WebSocketTransportProvider<ExampleStore>({ projectId: "your-project-id" }) }
)
);برای سمت سرور هم یه ایمیج داکر آماده هست که با یه دستور بالا میاد و بر اساس projectId درخواستها رو مسیریابی میکنه. یعنی برای شروع لازم نیست خودت سرور بنویسی.
نویسنده صریح میگه این پروژه هنوز «barebones» یا خیلی ابتداییه. توی نقشهی راه چیزهایی مثل storage provider های مختلف (Redis، Postgres، حافظه/دیسک)، ترنسپورتهای دیگه مثل WebRTC و HTTP Long Polling، احراز هویت و مجوزدهی، و حل تعارض و پشتیبانی آفلاین هست. پس فعلاً بیشتر برای آزمایش و پروژههای ساده مناسبه تا محیط پروداکشن سنگین.
نکات کلیدی:
- zustand-sync استیت zustand رو بین چند کلاینت همگام نگه میداره
- از استاندارد JSON Patch (RFC 6902) برای فرستادن فقط تفاوتها استفاده میکنه
- یه ترنسپورت وبسوکت و یه سرور آمادهی داکری داره
- با projectId درخواستها روی سرور مسیریابی میشن
- هنوز ابتداییه؛ احراز هویت، حل تعارض و آفلاین تو نقشهی راهن




