كيف تتزامن السبورة التعاونية في Bedrud
CRDTs من Yjs عبر قنوات بيانات LiveKit — لوحة مشتركة بدون خادم سبورة منفصل.
معظم مكدسات الفيديو تلصق السبورة كـ SaaS آخر، وWebSocket آخر، وأصل آخر للقائمة البيضاء. يُبقي Bedrud اللوحة داخل غرفة الاجتماع ويعيد استخدام مسار الوسائط الذي لديك أصلًا: قنوات بيانات LiveKit.
هدف المنتج
يفتح شخصان (أو عشرون) نفس التراكب، ويرسمون، ويحرّكون الأشكال، ويحذفون العناصر. يرى الجميع نفس المشهد خلال نحو ثانية. المغادرة وإعادة الانضمام لا تتركان الواجهة في حلقة تعطّل. المنضمّون المتأخرون يلحقون بالركب.
هذا هو المعيار الذي نختبره في دليلنا اليدوي: رسم متعدد المستخدمين، تحديد/نقل/حذف بعيد، إعادة فتح بعد الإغلاق، إعادة انضمام بعد المغادرة.
اختيار المكدس
| الجزء | الدور |
|---|---|
| Canvas UI | أدوات بأسلوب Excalidraw (مُضمَّنة في تطبيق الويب) |
| Shared state | مستند CRDT Yjs |
| Transport | قنوات بيانات reliable / lossy في LiveKit |
| Media A/V | مسارات WebRTC دون تغيير |
تسمح CRDTs بدمج التعديلات المتزامنة دون خادم operational-transform مركزي. LiveKit يُعدّد البيانات أصلًا لحمولات شبيهة بالدردشة؛ تركب السبورة ذلك المسار حتى لا ينشر المستضيفون الذاتيون خدمة realtime ثانية.
لماذا ليس HTTP polling؟
ضربات اللوحة عالية التغيّر وحساسة للتأخير. استطلاع API إما يثقل عملية Go أو يشعر بالبطء. قنوات البيانات:
- تبقى في نفس جلسة المشارك كالمكالمة
- تتجنب تعقيد CORS والكوكيز لخدمة جانبية
- تفشل وتتعافى مع اتصال الغرفة بدل وضع منفصل «السبورة غير متصلة»
يمكن للدردشة ورسائل تحكم المسرح وتحديثات اللوحة أن تتعايش على طبقة DC بينما تبقى وسائط SFU على RTP.
ملاحظة بناء للمستضيفين الذاتيين
السبورة جزء code-split في عميل الويب. يجب أن تكتمل بنى الإنتاج (cd apps/web && bun run build) حتى يكون جزء vendor موجودًا عند فتح اللوحة. 404 على ذلك الجزء خطأ تعبئة، وليس سوء إعداد LiveKit.
مفتاح تجريبي
يمكن تقييد السبورة المشتركة تحت الإعدادات → تجريبي حتى يفعّلها المضيفون عندما يريدون إدخال شريط التحكم. موثّق للمستخدمين النهائيين في السبورة التعاونية.
ما لا ندّعيه
- قفل مؤشر pixel-perfect عبر القارات
- تخزين offline-first لا نهائي لكل لوحة إلى الأبد
- تاريخ لوحة دائم من جانب الخادم كمنتج من الدرجة الأولى (التركيز اليوم على مزامنة الجلسة الحية)
جرّبها
انشر Bedrud، فعّل المفتاح التجريبي إن لزم، افتح غرفة في متصفحين، وارسم. إذا وصلت الخطوط للطرفين، فمسار DC + Yjs سليم.
لقصة المشغّل والبنية الكاملة لمستوى الوسائط، انظر اتصال WebRTC وواجهة الويب.