أحداث الخادم المرسلة
المحتويات

قبل الخوض في التفاصيل، أحداث الخادم المُرسلة (بالإنجليزية: Server-Sent Events، ويُختصر إليها بـ SSE) هي تقنية ويب تتيح للخادم إرسال تحديثات وأحداث إلى متصفح الويب بصورة مستمرة عبر اتصال بروتوكول نقل النصوص الترابطية (HTTP) مفتوح وأحادي الاتجاه، من الخادم إلى العميل. وفيما يلي تفاصيل أوسع عن ذلك.
علاوةً على ذلك، تعتمد أحداث الخادم المُرسلة على واجهة برمجة التطبيقات EventSource في جانب المتصفح والتي تُعد معيارًا معتمدًا ضمن لغة تأشير النص الترابطي 5، وقد تم توحيدها من طرف رابطة الشبكة العالمية (W3C).، بينما يمكن للخادم استخدام تقنيات وأطر عمل مختلفة لإنشاء وإرسال تدفق الأحداث.
في هذا الإطار، تُستعمل هذه التقنية عندما يحتاج تطبيق الويب إلى استقبال تحديثات من الخادم في الوقت الفعلي أو بصورة مستمرة، مثل الإشعارات، وتحديثات حالة العمليات، ومؤشرات التقدم، وسجلات الأحداث، وتدفقات البيانات.
التاريخ
وفي هذا الصدد، ظهرت فكرة أحداث الخادم المُرسلة SSE ضمن تطوير تقنيات دفع المحتوى من الخادم إلى العميل في تطبيقات الويب. وقد تضمنت مواصفات فريق عمل تكنولوجيا تطبيقات النصوص التشعبية على الويب (WHATWG) المبكرة للويب آلية لدعم إرسال المحتوى من الخادم، ثم بدأ متصفح أوبرا في عام 2006 بتجربة هذه التقنية.
وفي هذا السياق، أصبحت فكرة أحداث الخادم المُرسلة لاحقًا جزءًا من معايير الويب القياسية، وأصبحت واجهة EventSource مدعومة في عدد من متصفحات الويب الحديثة.
أحداث الخادم المُرسلة ومقبس ويب
علاوةً على ذلك، تختلف أحداث الخادم المُرسلة عن مقبس ويب في اتجاه الاتصال وطبيعة الاستخدام.
وفي هذا السياق، تكون أحداث الخادم المُرسلة مناسبة خصوصًا عندما يكون اتجاه البيانات الأساسي من الخادم إلى العميل، بينما تكون مقبس ويب أكثر ملاءمة للتطبيقات التي تتطلب اتصالًا تفاعليًا ثنائي الاتجاه.
نظرة عامة
ومن جهة أخرى، يكون اتجاه الاتصال في أحداث الخادم المُرسلة من الخادم إلى العميل فقط. لذلك يستطيع الخادم إرسال البيانات إلى المتصفح، بينما لا تُستعمل قناة أحداث الخادم المُرسلة نفسها لإرسال البيانات من العميل إلى الخادم.
وفي هذا السياق، يمكن إنشاء اتصال أحداث الخادم المُرسلة في جافا سكريبت باستخدام واجهة EventSource، مثل:
من جانب آخر، تختلف أحداث الخادم المُرسلة عن نموذج بروتوكول نقل النصوص الترابطية التقليدي الذي يرسل فيه العميل طلبًا ثم ينتظر استجابة مكتملة. ففي أحداث الخادم المُرسلة يمكن للعميل إنشاء اتصال مع الخادم والمحافظة عليه مفتوحًا، بينما يرسل الخادم الأحداث والتحديثات كلما توفرت.
- const source = new EventSource('/events');
- source.onmessage = (event) => {
- console.log(event.data);
};
من جهة ثانية، يمكن للتطبيق كذلك إغلاق الاتصال عندما لا يعود بحاجة إليه باستخدام:
كذلك، تدعم واجهة EventSource إعادة الاتصال تلقائيًا عند انقطاع اتصال أحداث الخادم المُرسلة. ويمكن للخادم تحديد مدة الانتظار قبل محاولة إعادة الاتصال.
source.close;
في هذا الإطار، ويستقبل المتصفح الأحداث المرسلة من الخادم ويتيح للتطبيق معالجتها باستخدام جافا سكريبت.
المزايا والقيود
علاوةً على ذلك، ومن أبرز قيودها أن الاتصال أحادي الاتجاه؛ فلا يمكن استخدام قناة أحداث الخادم المُرسلة نفسها لإرسال البيانات من العميل إلى الخادم. وعندما تكون هناك حاجة إلى اتصال ثنائي الاتجاه، يمكن استخدام تقنيات أخرى مثل مقبس ويب (WebSocket).
- من أبرز مزايا أحداث الخادم المُرسلة:
- سهولة استخدامها في تطبيقات الويب.
- اعتمادها على بروتوكول نقل النصوص الترابطية (HTTP).
- دعم إعادة الاتصال تلقائيًا.
- ملاءمتها للتحديثات والإشعارات في الوقت الفعلي.
- دعمها لتدفق البيانات من الخادم إلى العميل.
تنسيق الأحداث
- يُرسل الخادم أحداث الخادم المُرسلة بتنسيق نصي محدد. ومن أهم الحقول المستعملة:
- event: يحدد نوع الحدث.
- data: يحتوي على البيانات المرسلة إلى العميل.
- id: يحدد معرّف الحدث.
- retry: يحدد مدة الانتظار قبل محاولة إعادة الاتصال.
- مثال مبسط:
- event: update
data: {"status":"completed"}
وفي هذا السياق، ينتهي الحدث بسطر فارغ، ويمكن أن تحتوي البيانات على نص عادي أو بيانات منظمة، مثل JSON.
حالات الاستخدام
- تُستعمل أحداث الخادم المُرسلة في الكثير من تطبيقات الويب، ومن أمثلتها:
- الإشعارات والتحديثات في الوقت الفعلي.
- متابعة حالة العمليات.
- عرض نسبة تقدم المهام.
- بث الأخبار أو المعلومات المتغيرة باستمرار.
- تحديث لوحات المعلومات.
- عرض سجلات الأنظمة والعمليات في الوقت الفعلي.
- إرسال تدفقات البيانات إلى متصفح الويب.
- انظر كذلك
- مقبس ويب
- بروتوكول نقل النصوص الترابطية
- خادم ويب
- جافا سكريبت
- المراجع
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟