المقدمة
افتح اتصال WebSocket في الوقت الحقيقي لتلقي المحتوى، وتحديثات الطلب، وتحديثات المستخدم دون الحاجة للاستعلام المتكرر.
مزيد من المعلومات حول واجهة المستخدم الخاصة بالوحدة https://doc.oneentry.cloud/docs/events/introduction
🎯 ماذا تفعل هذه الوحدة؟
تتيح لك وحدة WS (WebSocket) تلقي إشعارات في الوقت الحقيقي - تحديثات المحتوى، تغييرات الطلب، إجراءات المستخدم - عبر اتصال مستمر، بحيث يقوم الخادم بدفع التحديثات إليك على الفور بدلاً من أن تقوم بالاستعلام عنها. وهذا يمكّن الميزات الحية مثل الإشعارات، والدردشة الحية، ولوحات المعلومات في الوقت الحقيقي.
تفتح الطريقة الوحيدة، connect(), الاتصال وتعيد Socket من socket.io. إنها متزامنة و تتطلب مستخدمًا مصرحًا به، لذا قم بالمصادقة أولاً.
🚀 البدء السريع
قم بتهيئة الوحدة من defineOneEntry:
const { WS } = defineOneEntry( "your-project-url", { "token": "your-app-token" });
connect() متزامنة وتعيد Socket من socket.io (لا تستخدم await). قم بإرفاق معالجات الأحداث باستخدام socket.on(...):
// connect() requires an authorized user — authenticate first via AuthProvider.
const socket = WS.connect();
socket.on('connect', () => {
console.log('WebSocket connected');
});
// Listen for an event by its marker (configured in the Events module).
socket.on('my_event', (payload) => {
console.log('Update received!', payload);
});
✨ المفاهيم الأساسية
ما هو WebSocket؟
WebSocket هو اتصال ثنائي الاتجاه مستمر بين العميل والخادم:
- اتصال مستمر - يبقى مفتوحًا، لا توجد مصافحات متكررة
- ثنائي الاتجاه - يمكن لكل من العميل والخادم إرسال الرسائل
- في الوقت الحقيقي - تسليم الرسائل على الفور
- معتمد على الأحداث - استمع إلى الأحداث باستخدام
socket.on(...) - فعال - تكلفة منخفضة مقارنة بالاستعلام عبر HTTP
WebSocket مقابل الاستعلام عبر HTTP
| الميزة | WebSocket | الاستعلام عبر HTTP |
|---|---|---|
| الاتصال | مستمر (يبقى مفتوحًا) | اتصالات متكررة |
| الكمون | أقل من ثانية | يعتمد على الفاصل الزمني (2-30 ثانية) |
| الكفاءة | فعالة جدًا | مهدرة (الكثير من الاستجابات الفارغة) |
| حمل الخادم | منخفض (أحداث فقط) | مرتفع (طلبات مستمرة) |
| حالة الاستخدام | تحديثات في الوقت الحقيقي | مقبولة للتحديثات غير الحرجة |
دورة حياة الاتصال
1. Authenticate the user (AuthProvider.auth)
↓
2. Open the connection: const socket = WS.connect()
↓
3. Wait for the 'connect' event: socket.on('connect', ...)
↓
4. Listen for events: socket.on('<event_marker>', callback)
↓
5. Server pushes events as they occur
↓
6. Disconnect when done: socket.disconnect()
ما هي الأحداث التي تصل عبر الاتصال
لا يوجد كتالوج ثابت لأسماء أحداث SDK. يتم تشغيل الأحداث وفقًا لتكوين وحدة الأحداث الخاصة بك في لوحة الإدارة (يجب أن يكون الخيار WebSocket مفعلًا). يمكنك الاستماع إلى حدث بواسطة علامته باستخدام socket.on('<event_marker>', callback).
تعتمد الحمولة على مصدر الحدث. الحقول النموذجية للحمولة (انظر connect() للحصول على أمثلة كاملة):
| حقل الحمولة | يصل لـ | يحتوي على |
|---|---|---|
attributes | كل حدث | سمات الحدث نفسه |
product | أحداث الكتالوج (المنتج) | سمات المنتج بالإضافة إلى title |
user | أحداث نموذج المستخدم | الحقول من نموذج المستخدم |
order | أحداث الطلب | id الطلب والسمات |
email / code | نماذج التسجيل / الكود | حقول إضافية من النموذج |
📋 ما تحتاج إلى معرفته
المصادقة مطلوبة
تتطلب connect() مستخدمًا مصرحًا به — اتصل بـ AuthProvider.auth(...) قبل الاتصال. يتم مصادقة الاتصال باستخدام رمز وصول المستخدم بالإضافة إلى رمز تطبيقك من defineOneEntry(). إذا لم يكن هناك مستخدم مصرح به، يسجل SDK خطأ.
connect() متزامنة
تعيد connect() Socket من socket.io على الفور — لا تستخدم await معها. انتظر حدث connect قبل الاعتماد على المقبس، ثم قم بإرفاق المعالجات باستخدام socket.on(...).
اشترك بعد فتح الاتصال، ونظف عند الانتهاء
قم بإرفاق معالجات الأحداث بعد أن يتم تشغيل حدث connect، وقم بفصلها (socket.off) بالإضافة إلى استدعاء socket.disconnect() عندما لم يعد الاتصال مطلوبًا (على سبيل المثال، عند إلغاء تحميل المكون أو تسجيل خروج المستخدم) لمنع تسرب الذاكرة في تطبيقات SPA.
إعادة الاتصال
يعيد socket.io الاتصال تلقائيًا بشكل افتراضي. لتخصيص ذلك، استمع لأحداث disconnect و connect_error وأعد الاتصال مع زيادة زمنية، مع إعادة تعيين التأخير عند نجاح connect.
📊 جدول مرجعي سريع
| الطريقة | الوصف | حالة الاستخدام |
|---|---|---|
| connect() 🔐 | الاتصال بخادم WebSocket | إنشاء الاتصال |
🔐 تتطلب
connect()مستخدمًا مصرحًا به — قم بالمصادقة أولاً عبر AuthProvider. بعد الاتصال، قم بإرفاق معالجات الأحداث باستخدامsocket.on(...).
❓ الأسئلة الشائعة (FAQ)
كيف يمكنني الاتصال بخادم WebSocket؟
استخدم WS.connect() لفتح اتصال — إنها متزامنة وتعيد Socket من socket.io. تتطلب مستخدمًا مصرحًا به، لذا اتصل بـ AuthProvider.auth(...) أولاً. انتظر حدث connect قبل الاعتماد على المقبس، ثم قم بإرفاق المعالجات باستخدام socket.on('<event_marker>', callback).
ما هي الأحداث التي يمكنني الاشتراك فيها؟
لا توجد قائمة ثابتة لأحداث SDK. يتم تعريف الأحداث بواسطة تكوين وحدة الأحداث الخاصة بك في لوحة الإدارة (مع تفعيل خيار WebSocket)، وتستمع إلى حدث بواسطة علامته باستخدام socket.on('<event_marker>', callback). انظر connect() للحصول على أمثلة الحمولة (المنتج، المستخدم، الطلب، النموذج).
كيف يمكنني التعامل مع انقطاع الاتصال؟
يعيد socket.io الاتصال تلقائيًا بشكل افتراضي. لتخصيص ذلك، استمع لأحداث disconnect و connect_error وأعد الاتصال مع زيادة زمنية (مثل 1 ثانية، 2 ثانية، 4 ثوانٍ، 8 ثوانٍ، حتى حد أقصى)، مع إعادة تعيين عداد التأخير عند نجاح connect.
كيف يمكنني منع تسرب الذاكرة مع اشتراكات WebSocket؟
افصل معالجات الأحداث (socket.off) واستدعِ socket.disconnect() عندما يتم إلغاء تحميل المكونات أو لم يعد الاتصال مطلوبًا. في React، قم بذلك في تنظيف useEffect؛ في Vue، في beforeUnmount.
🎓 أفضل الممارسات
- قم بالمصادقة أولاً - تتطلب
connect()مستخدمًا مصرحًا به. - لا تنتظر connect() - إنها متزامنة وتعيد
Socket. - اشترك بعد فتح الاتصال - قم بإرفاق المعالجات بعد تشغيل حدث
connect. - نظف - افصل المعالجات (
socket.off) وsocket.disconnect()لمنع تسرب الذاكرة في تطبيقات SPA. - تعامل مع إعادة الاتصال - يعيد socket.io الاتصال تلقائيًا؛ خصص ذلك باستخدام
disconnect/connect_errorوزيادة زمنية إذا لزم الأمر. - تحقق من صحة حمولة الأحداث - يعتمد شكل الحمولة على مصدر الحدث؛ تحقق من الحقول قبل استخدامها.
🔗 الوثائق ذات الصلة
- وحدة AuthProvider - قم بتفويض المستخدم قبل الاتصال
- وحدة الطلبات - أحداث الطلبات لتتبع الطلبات في الوقت الحقيقي
- وحدة المستخدمين - أحداث المستخدمين لإشعارات التسجيل
- واجهة برمجة تطبيقات WebSocket