Summary
- نشرت W3C أول مسودة عمل لـ Server-Sent Events في 23 أبريل 2009. وصفت
EventSourceلتلقي الصفحة أحداثاً متتابعة من الخادم عبر اتصال HTTP. - يستطيع الحدث حمل حقل
id. وإذا انقطع الخط، يرسل المتصفح آخر معرّف يتذكره فيLast-Event-IDعند الاتصال التالي؛ ويمحو حقلidالفارغ ذلك التذكّر.
يتجمد شريط الأسعار عند رقم واحد. قد تبدو الفكرة مغرية: لعل السوق كله قرر أن يأخذ استراحة شاي. لكن رقماً جديداً يظهر بعد لحظة، فتبدأ المشكلة الحقيقية. ما الذي جرى بين الرقمين؟ عودة الحركة إلى الشاشة لا تخبر القارئ وحدها إن كانت السلسلة كاملة.
قدمت مسودة العمل التي نشرتها W3C في 23 أبريل 2009 واجهة EventSource. تفتح الصفحة عنواناً وتنتظر الأحداث. يرد الخادم بدفق يحمل نوع المحتوى text/event-stream، ويقرأ المتصفح سطوره حتى يكتمل كل حدث ثم يسلمه إلى برنامج الصفحة. بقي النقل ضمن HTTP، لكن الدفق اكتسب علامات بسيطة تفصل الخبر عن الخبر، وتحدد موضع القارئ إذا انقطع الطريق.
في مثال الأسهم بالمسودة، كتب الخادم ثلاث سطور بيانات: YHOO و+2 و10. أنهى سطر فارغ الكتلة، فأطلق المتصفح حدثاً واحداً يضم القيم الثلاث. فصلت الصفحة القيم لتحدّث عرض السعر. كأن السطر الفارغ نقطة في نهاية جملة تُكتب على ورق لا يتوقف عن الخروج من الآلة. من دونه، يصبح وصول البايتات أقل وضوحاً من وصول الأخبار.
ثم وضعت المسودة رقماً بجوار رسالة: id: 1. حفظ المتصفح الرقم بعدما تلقى الحدث. إذا سقط الاتصال قبل وصول الحدث التالي، حمل الطلب الجديد الترويسة Last-Event-ID: 1. احتفظت مسودة الدعوة الأخيرة للتعليقات في ديسمبر 2009 بهذه الطريقة. يعود القارئ إلى مكتب الأخبار ومعه علامة على الصفحة التي وصل إليها، بدل أن يطلب من الموظف تخمين مكان توقفه.
تلك العلامة تفيد الخادم الذي يحتفظ بتاريخ الأحداث. يستطيع أن ينظر إلى الرقم ويقرر ما الذي يأتي بعده. وقد يكون التاريخ قد انتهى أو بدأت جلسة جديدة، فيحتاج الخادم إلى قرار مختلف. المتصفح يعرف آخر ما استقبله؛ والخادم يعرف ما بقي في سجله، ومدة الاحتفاظ به، وحدود إعادة الإرسال. الرقم يربط المعرفتين. لا يحمل وحده نسخة خفية من الأخبار التي فاتت.
في مثال آخر، جاء حقل id بلا قيمة. يمحو ذلك الحقل المعرّف المحفوظ؛ وعند إعادة الاتصال مرة أخرى، يغيب Last-Event-ID عن الطلب. تفصيل صغير يصلح لنهاية يوم تداول: موضع الأمس قد لا يكون عنواناً صالحاً لصباح اليوم. أعطى التنسيق للمرسل طريقة ليقول إن الدفتر القديم أُغلق، وإن بداية السلسلة التالية تحتاج إلى ترتيب جديد.
تستطيع الرسالة أيضاً أن تحتوي سطراً يبدأ بنقطتين. يقرأه المتصفح تعليقاً ولا يعرضه حدثاً على الصفحة. شرحت توصية W3C الصادرة في فبراير 2015 أن إرسال تعليق بين حين وآخر قد يحمي اتصالاً هادئاً من بعض الوكلاء القدامى الذين يغلقونه سريعاً. وتصف التوصية حقل retry لضبط انتظار المحاولة التالية، واستجابة HTTP 204 No Content التي تطلب من المتصفح التوقف عن المحاولة. حتى جهاز بث الأخبار يحتاج إلى إشارة «ما زلت هنا» وإلى لافتة «انتهى الدوام».
يعرض سجل النشر لدى W3C مسار الوثيقة من مسودات 2009 إلى لقطة التوصية المرشحة في 2012 ثم توصية 2015. الفكرة التي استمرت خلال تلك السنوات متواضعة الحجم وقوية الأثر: متن الحدث، ومعرّف اختياري، وطلب لاحق يخبر الخادم بآخر ما سمعه المتصفح. لم يعد انقطاع السلك لحظة صمت مبهمة تماماً.
تختلف هذه الحكاية عن Web Workers، مع أن الرسائل حاضرة في القصتين. هناك يعمل نص منفصل داخل المتصفح كي لا يحتجز الحساب الطويل تفاعل الصفحة. هنا تصل الأخبار من الخادم، ثم يعود رقم إلى الخادم بعد انقطاعها. الأولى تقسم العمل؛ والثانية تقسم مسؤولية الذاكرة. قد لا يلاحظ قارئ الأسعار سطراً اسمه Last-Event-ID، لكنه سيلاحظ فجوة إذا ضاعت منه أخبار منتصف الشريط.
إحاطة الأعضاء
سياق أعمق للملف الشخصي
سجّل الدخول بمستوى العضوية المناسب لفتح الإحاطة الكاملة وملاحظات المصادر.
للدائرة الاستراتيجية فقط
الدائرة الاستراتيجية
مفتوح لجميع القراء. افتح إحاطات الملف الشخصي بعد الانضمام وتسجيل الدخول.
انضم إلى الدائرة الاستراتيجيةلأعضاء تحالف القيادات فقط
تحالف القيادات
لأصحاب الأصول الفكرية المؤهلين وللإدارة؛ سجّل الدخول للوصول إلى إحاطات التحالف.
انضم إلى تحالف القيادات





