فهم أحداث الخادم المرسلة (Server Sent Events)

تخيل أنك تستخدم ChatGPT. تطرح سؤالاً، وبدلاً من رؤية الكلمات تظهر واحدة تلو الأخرى، تضطر للانتظار لمدة 5 ثوانٍ حتى تظهر الإجابة كاملة دفعة واحدة.

هذا التأخير يبدو بطيئاً، ويسبب الشعور بالإحباط.

ولحل هذه المشكلة، يستخدم المطورون الاستجابات المتدفقة (streaming responses)، مما يجعل التجربة تبدو سريعة.

تجعل أحداث الخادم المرسلة (SSE) هذا الأمر ممكناً.

ما هي الـ SSE؟ الـ SSE هي معيار لتدفق البيانات من الخادم إلى العميل عبر بروتوكول HTTP. وهي تتيح للخادم إرسال التحديثات إليك في الوقت الفعلي.

كيف تعمل: يرسل الخادم كتلًا نصية صغيرة. تستخدم هذه الكتل حقولاً مثل data و event و id و retry. وتفصل بين كل كتلة وأخرى سطر فارغ.

مثال: data: {"name": "Portal Gun", "price": 999.99}

الاستخدامات الشائعة لـ SSE:

  • تدفق دردشة الذكاء الاصطناعي (AI chat streaming)
  • الإشعارات المباشرة
  • السجلات في الوقت الفعلي (Real time logs)
  • مراقبة الأنظمة (System observability)

قبل ظهور SSE، كان المطورون يستخدمون طريقتين رئيسيتين للحصول على التحديثات:

  1. الاستطلاع القصير (Short polling) يطلب العميل البيانات من الخادم. إذا لم تكن البيانات جاهزة، يرسل الخادم رسالة انتظار. ينتظر العميل ثم يطلب مرة أخرى، وتتكرر هذه العملية حتى تكتمل المهمة.

  2. الاستطلاع الطويل (Long polling) يطلب العميل البيانات من الخادم، فيقوم الخادم بالإبقاء على الطلب مفتوحاً حتى تصبح البيانات جاهزة أو يحدث انتهاء المهلة (timeout). يجب على العميل إعادة إرسال الطلب فور تلقي الاستجابة.

تتعامل تدفقات الأحداث (Event streams) مع العمليات المستمرة. تتبع هذه العمليات ترتيباً معيناً، ويشمل ذلك مهاماً بسيطة مثل إنشاء ملف PDF أو مهاماً معقدة مثل المعاملات المصرفية.

يفتح الخادم قناة اتصال مع العميل، ويحافظ على بقاء هذه القناة مفتوحة حتى تنتهي العملية.

المصدر: https://dev.to/rishini_dharan_t/understanding-server-sent-events-3mkd