Realtime
يتيح Realtime للعملاء متابعة التغييرات في قاعدة البيانات، وتبادل رسائل البث والحضور فيما بينهم، عبر supabase.channel()، كما في Supabase. كل بيئة تشغّله لنفسها.
شغّله
- افتح البيئة في لوحة الإدارة، ثم Services.
- تحت Realtime اضغط Turn on Realtime. تظهر Applying… ثم On، وعادةً خلال دقيقة.
وحدهم مالكو العميل ومديروه يرون هذا القسم. إذا لم تكفِ ذاكرة الخادم أو اتصالات قاعدة البيانات لتشغيل Realtime لبيئة أخرى، يقول القسم ذلك ولا يتغير شيء؛ انظر اختيار خادم.
استخدمه
لا يتغير شيء في تطبيقك: وجّه supabase-js إلى عنوان البيئة مع مفتاحها العام، كما تفعل مع كل شيء آخر.
const channel = supabase.channel('room-one')
.on('broadcast', { event: 'hello' }, (message) => console.log(message.payload))
.on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'messages' }, (change) => console.log(change.new))
.on('presence', { event: 'sync' }, () => console.log(channel.presenceState()))
.subscribe()- تغييرات قاعدة البيانات: كل جدول في المخطط
publicمنشور، ومنه الجداول التي تنشئها لاحقًا. ويملك حساب المطوّر الخاص بالبيئة النشرsupabase_realtime، كما يملكهpostgresفي Supabase، فيستطيع ملف ترحيل يعمل عبر الوصول المباشر إلى قاعدة البيانات أن يضيف إليه جداول مخططاته الخاصة واحدًا تلو الآخر (alter publication supabase_realtime add table app.items). أمان الصفوف يحدد من يستلم التغيير: لا يصل الصف إلى عميل إلا إذا كان يستطيع قراءته بـselect. - البث والحضور: بين العملاء على القناة نفسها، ومن خادم عبر
POST <address>/realtime/v1/api/broadcast. - القنوات الخاصة: تعمل السياسات على
realtime.messagesكما في Supabase.
كيف يعمل
كل بيئة تشغّل Realtime تحصل على خدمة Realtime صغيرة خاصة بها (الصورة الأصلية، بإصدار مثبّت). تستهلك حتى 320 MiB من الذاكرة وتتوقف عندما تطفئ Realtime. تدخل إلى قاعدة بيانات تلك البيئة وحدها، بحساب دخول خاص بها.
عند أول تشغيل لـ Realtime، وبعد الترقية إلى إصدار أحدث منه، يُعطى حساب دخوله صلاحيات المدير لثوانٍ قليلة يحتاجها Realtime لإنشاء مخططه الخاص، كما يتوقع Realtime الأصلي. تُسحب هذه الصلاحيات، وتُغلق كل جلسة حصلت عليها، قبل أن ينتهي التشغيل.
يمر الاتصال وواجهة البث عبر البوابة نفسها التي يمر بها REST: المفتاح الخاطئ أو الملغى يُرفض قبل أن يصل أي شيء إلى Realtime. ولا يمكن الوصول إلى واجهة إدارة Realtime نفسها من الخارج أبدًا.
يشغّل CI خدمة Realtime لبيئة على جهاز نظيف مع كل تغيير، فيتبادل عميلان من supabase-js بثًا ويتشاركان الحضور ويستلمان صفًا أُضيف عبر REST، ويتحقق أن المفتاح الخاطئ يُرفض، ثم يطفئها من جديد (الدليل).
الحدود
- يعمل Realtime خلف وكيل TLS فقط إذا كان الوكيل يمرّر اتصالات WebSocket. الوكيل المرجعي (
deploy/console-tls-proxy.ts) يمرّرها. - تُنشر التغييرات لجداول المخطط
public، ولا تُنشر جداول المخططات الأخرى إلا بعد أن يضيفها ملف ترحيل إلى النشر. - إطفاء Realtime يقطع الاتصالات المفتوحة، ويعيد العملاء الاتصال عندما يعود.