أرسل رسائل مباشرة وحضورًا باستخدام JavaScript SDK
التدفقات اليومية لـ aura.realtime، مع سلوك كل مكالمة كما لوحظ مقابل مكدس قيد التشغيل.
1. القنوات وحالتها
القناة عبارة عن غرفة مسماة. العملاء الذين يفتحون نفس الاسم يتلقون رسائل بعضهم البعض. يتصل العميل من تلقاء نفسه عند الاشتراك.
أرسل فقط بعد SUBSCRIBED. قبل ذلك، أو بعد الرفض، تقوم send() بإرجاع حالة مثل not_connected أو requires_subscription بدلاً من الإرسال. يتم تحديد نطاق القنوات وفقًا لمشروعك: يمكن لمشروعين استخدام نفس الاسم دون رؤية بعضهما البعض.
2. بث الرسائل
وفي التشغيل الحقيقي، تلقى العميل الثاني الذي قام بتسجيل الدخول الرسالة في أقل من ثانيتين.
تتضمن الرسالة التي تتلقاها اسم الحدث المضاف إلى payload: { "event": "ping", "n": 1, … }. يُرفض أي payload يحمل مفتاح event خاصًا به (تُرجع channel.send القيمة 'invalid_payload'، وتُرجع httpBroadcast الخطأ realtime_payload_event_reserved): أعد تسمية المفتاح، مثلًا kind.
- لا تتلقى رسائلك الخاصة بشكل افتراضي. افتح القناة بـ
{ config: { broadcast: { self: true } } }لاستقبالهم. - تحمل الرسالة
idوtopicوtimestampوeventوpayload.
3. الحضور
يظهر الحضور الأشخاص المتصلين بالقناة، مع الحالة التي تختارها.
يتم ربط presenceState() بواسطة معرف المستخدم. يسرد كل إدخال اتصالات المستخدم:
untrack() يزيلك من القائمة، وترك القناة أو إغلاق الصفحة يفعل ذلك نيابة عنك.
4. تغييرات قاعدة البيانات
يعمل postgres_changes في المشاريع التي لها قاعدة بيانات خاصة بها. فعّل كل جدول أولًا: PUT /v1/db/{project_id}/schema/tables/{table}/realtime مع جسم الطلب {"enabled": true} ومفتاح service_role. يبدأ الاستماع عندما يشترك أول عميل ويتوقف بعد بضع دقائق من مغادرة آخر عميل. التسليم مرة واحدة على الأقل: بعد إعادة تشغيل الخادم قد يصل التغيير نفسه مرتين، لذا اجعل معالجك متساوي القوة (idempotent)، مثلًا بالاعتماد على المفتاح الأساسي للصف. قد ترفض مجموعة مشغولة مستمعًا جديدًا بخطأ في السعة؛ أعد المحاولة بعد قليل. سمِّ القناة باسم الجدول، db:public.<table>: على هذه القناة تُنشر التغييرات. قد يتلقى أول مشترك ما يصل إلى 5 ثوانٍ من التغييرات التي أُجريت قبيل اشتراكه. تُحفظ التغييرات ساعة واحدة لأغراض الاستئناف ثم تُحذف. عندما يكون العنقود ممتلئًا يفشل الاشتراك بالرسالة capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez. إذا بقي الاستماع مفقودًا أكثر من دقيقة تنتقل القناة إلى CHANNEL_ERROR؛ اشترك من جديد بعد عودته. أي انقطاع أطول من ساعة الاحتفاظ يُفقد التغييرات التي أُجريت خلاله.
5. تنظيف
شاهد الاتصال مع aura.realtime.onStateChange(callback) و onError(callback). بعد انقطاع الاتصال، يقوم العميل بإعادة الاتصال بنفسه ما لم تتصل بـ setAutoReconnect(false).