Hocuspocus: همکاری بلادرنگ روی اپهات
خلاصهٔ کاملتر
Hocuspocus یه مجموعه ابزاره که هدفش اینه قابلیت همکاری بلادرنگ (real-time) رو به اپلیکیشن تو اضافه کنه. این ابزار روی کتابخونهی Y.js ساخته شده؛ همون چیزی که کارش همگامسازی و ادغام تغییرات چند کاربر به صورت زندهست. جالبیش اینه که فقط برای حالت آنلاین نیست — میتونی باهاش اپهای آفلاینفرست هم بسازی که تغییرات رو محلی نگه میدارن و بعداً سینک میکنن.
هستهی ماجرا یه مفهومه به اسم CRDT (نوع دادهی تکثیرشوندهی بدون تعارض). نکتهی اصلیش اینه که ترتیب اعمال شدن تغییرات اصلاً مهم نیست؛ مقاله خودش اینو به Git تشبیه میکنه که فرقی نمیکنه تغییرات کِی کامیت بشن. هر کپی از داده هم دقیقاً همونقدر معتبره که بقیه. همین باعث میشه بشه اپهای بلادرنگِ پرفورمنس بالا ساخت و وضعیت حضور (awareness) کاربرها رو هم سینک کرد.
با Y.js عملاً هر پروتکل شبکهای که بخوای میتونی برای رد و بدل کردن تغییرات استفاده کنی، ولی رایجترینش WebSocket هست. اینجاست که خودِ سرور هاکوسپوکوس وارد میشه: یه بکاند وبسوکت آماده که همه چیز رو داره تا سریع شروع کنی، Y.js رو به زیرساخت فعلیت وصل کنی و تا حد میلیونها کاربر مقیاس بدی.
از نظر امکانات، تغییرات رو بدون تعارض ادغام میکنه، میتونه کل state اپ رو سینک کنه، و برای ویرایش متنِ مشارکتی با ادیتورهایی مثل Tiptap، Slate، Quill، Monaco و ProseMirror کار میکنه. میتونه تغییرات رو به Webhook بفرسته و با Redis تا میلیونها کاربر مقیاس بگیره.
از نظر فنی هم با TypeScript نوشته شده و روی Node.js، Bun، Deno و از نسخهی ۴ به بعد روی Cloudflare Workers اجرا میشه. برای ریاکت هم بایندینگ درجهیک از طریق پکیج @hocuspocus/provider-react داره، پس وصل کردنش به یه اپ React خیلی تمیزه.
نکات کلیدی:
- هاکوسپوکوس یه سرور وبسوکت برای همکاری بلادرنگه که روی Y.js ساخته شده
- مبنای کارش CRDT هست؛ تغییرات بدون تعارض و بدون اهمیتِ ترتیب ادغام میشن
- از حالت آفلاینفرست و سینک بعدی تغییرات پشتیبانی میکنه
- با ادیتورهای متنی مثل Tiptap و ProseMirror و با Webhook کار میکنه
- با TypeScript نوشته شده، روی Node/Bun/Deno/Cloudflare Workers اجرا میشه و با Redis تا میلیونها کاربر مقیاس میگیره




