بازگشت به وبلاگ

تخته سفید مشترک Bedrud چطور همگام می‌شود

CRDTهای Yjs روی data channelهای LiveKit — تخته مشترک بدون سرور تخته جدا.

۱۹ تیر ۱۴۰۵ Bedrud Team engineering, whiteboard, webrtc, yjs

بیشتر استک‌های ویدیو تخته سفید را مثل SaaS دیگری، WebSocket دیگری، origin دیگری برای allowlist می‌چسبانند. Bedrud تخته را داخل اتاق جلسه نگه می‌دارد و همان مسیر رسانه‌ای را که دارید دوباره استفاده می‌کند: LiveKit data channels.

هدف محصول

دو نفر (یا بیست نفر) همان همپوشانی را باز می‌کنند، رسم می‌کنند، شکل‌ها را جابه‌جا و عناصر را حذف می‌کنند. همه تقریباً در یک ثانیه همان صحنه را می‌بینند. ترک و پیوستن مجدد UI را در حلقه کرش گیر نمی‌اندازد. پیوسته‌های دیرهنگام عقب می‌افتند.

این معیار تست راهنمای دستی ماست: رسم چندکاربره، انتخاب/جابه‌جایی/حذف راه دور، بازکردن بعد از بستن، پیوستن مجدد بعد از ترک.

انتخاب استک

قطعهنقش
Canvas UIابزار Excalidraw-مانند (vendored در اپ وب)
Shared stateسند CRDT Yjs
Transportdata channelهای reliable / lossy LiveKit
Media A/Vtrackهای WebRTC بدون تغییر

CRDTها ویرایش‌های همزمان را بدون سرور operational-transform مرکزی merge می‌کنند. LiveKit از قبل data را برای payloadهای شبیه چت multiplex می‌کند؛ تخته همان مسیر را سوار می‌شود تا خودمیزبان‌ها سرویس realtime دومی دیپلوی نکنند.

چرا HTTP polling نه؟

ضربه‌های تخته پرتکرار و حساس به تأخیرند. Polling به API یا فرآیند Go را می‌کوبد یا کند حس می‌شود. Data channelها:

  • در همان نشست شرکت‌کننده تماس می‌مانند
  • پیچیدگی CORS و cookie سرویس جانبی اضافه نمی‌کنند
  • با اتصال اتاق fail/recover می‌شوند، نه حالت جدا «whiteboard offline»

چت، پیام‌های کنترل صحنه و به‌روزرسانی تخته می‌توانند روی لایه DC همزیست باشند در حالی که رسانه SFU روی RTP می‌ماند.

یادداشت build برای خودمیزبان‌ها

تخته یک chunk code-split در کلاینت وب است. buildهای production باید کامل شوند (cd apps/web && bun run build) تا vendor chunk هنگام باز کردن تخته موجود باشد. 404 روی آن chunk باگ بسته‌بندی است، نه misconfiguration LiveKit.

سوئیچ آزمایشی

تخته مشترک می‌تواند زیر تنظیمات → آزمایشی gated باشد تا میزبان‌ها وقتی می‌خواهند ورودی نوار کنترل را فعال کنند. برای کاربران نهایی در تخته سفید مشترک مستند شده.

آنچه ادعا نمی‌کنیم

  • قفل نشانگر pixel-perfect بین قاره‌ها
  • ذخیره‌سازی offline-first بی‌نهایت هر تخته برای همیشه
  • تاریخچه durable سمت سرور به‌عنوان محصول درجه یک (امروز تمرکز روی همگام نشست زنده است)

امتحان کنید

Bedrud را دیپلوی کنید، در صورت نیاز سوئیچ آزمایشی را روشن کنید، اتاق را در دو مرورگر باز کنید و رسم کنید. اگر خطوط برای هر دو طرف می‌رسند، مسیر DC + Yjs سالم است.

برای داستان کامل اپراتور و معماری صفحه رسانه، ببینید اتصال WebRTC و فرانت‌اند وب.