Skip to content

آليات الاتصال في الوقت الفعلي (Polling / SSE / WebSocket)

القراءة الأساسية

كيف يحقق المتصفح تحديث البيانات في الوقت الفعلي؟ يعتمد بروتوكول HTTP التقليدي على نموذج "الطلب-الاستجابة"، حيث يجب على العميل بدء الطلب بنشاط حتى يتمكن الخادم من إرجاع البيانات. إذا كنا بحاجة إلى تنفيذ سيناريوهات في الوقت الفعلي مثل غرف الدردشة أو أسعار الأسهم، فإن هذا النموذج يواجه تحديات.

سيقدم هذا الفصل تقنيات الواجهة الأمامية الثلاث الرئيسية للاتصال بالبيانات في الوقت الفعلي: الاقتراع القصير (Polling)، وأحداث الإرسال من الخادم (SSE)، وWebSocket مزدوج المسار بالكامل، واستكشاف مبادئها وسيناريوهات تطبيقها.


1. قيود HTTP التقليدي

تم تصميم بروتوكول HTTP في الأصل لاسترجاع المستندات، وهو يتميز بكونه بدون حالة (Stateless) ويبدأه العميل باتجاه واحد:

  1. يبدأ العميل طلب HTTP.
  2. يعالج الخادم الطلب ويعيد استجابة.
  3. بعد إتمام المهمة، عادةً ما يتم تحرير الطلب المنطقي المقابل (على الرغم من أن HTTP/1.1 يدعم إعادة استخدام الاتصالات المستمرة، إلا أن نموذج الطلب-الاستجابة على مستوى الأعمال لم يتغير).

في هذا الوضع، لا يمكن للخادم إعلام العميل المنتظر بشكل استباقي بتغييرات الحالة. للحصول على أحدث البيانات، يجب إيجاد حلول معمارية أخرى.


2. الاقتراع القصير (Polling)

الحل الأكثر مباشرة هو الاقتراع القصير. أي أن العميل يستخدم مؤقتًا (مثل setInterval)، وكل فترة زمنية ثابتة، يرسل تلقائيًا طلب HTTP إلى الخادم للسؤال عما إذا كانت هناك بيانات جديدة قد وصلت.

الخصائص التقنية والقيود:

  • الميزة: آلية التنفيذ بسيطة للغاية، وتعتمد كليًا على بروتوكول HTTP القياسي وتقنية AJAX/Fetch.
  • العيوب: قد يولد حملًا شبكيًا هائلاً وإهدارًا للموارد. في معظم الأوقات، قد تكون استجابة الخادم "لا توجد بيانات جديدة". بغض النظر عن وجود بيانات أو عدمه، يجب أن يحمل كل طلب رؤوس HTTP كاملة (Headers، Cookies، إلخ)، مما يؤدي في سيناريوهات التزامن العالي إلى احتلال موارد الشبكة بأعداد كبيرة من الاستعلامات غير ذات المعنى.

3. أحداث الإرسال من الخادم (Server-Sent Events)

لتقليل تكلفة إنشاء اتصالات HTTP المتكررة، يوفر Server-Sent Events (SSE) بنية دفع تدفق بيانات أحادية الاتجاه خفيفة.

يعتمد SSE على بروتوكول HTTP. بعد أن يبدأ العميل طلب HTTP يحتوي على رأس خاص (Accept: text/event-stream)، يحافظ الخادم على اتصال TCP الأساسي مفتوحًا عند إرجاع الاستجابة. بعد ذلك، يمكن للخادم دفع البيانات بتنسيق نصي باستمرار إلى العميل من خلال هذه القناة المستمرة.

الخصائص التقنية والقيود:

  • الميزة: اتصال مستمر، حمل شبكي منخفض؛ يدعم المتصفح أصليًا آلية إعادة الاتصال التلقائي عند الانقطاع؛ مناسب جدًا للنقل أحادي الاتجاه لبيانات التدفق من الخادم إلى العميل (على سبيل المثال، إخراج النص حرفًا بحرف من نماذج اللغة الكبيرة، إشعارات المعاملات في الوقت الفعلي).
  • العيوب: قناة الاتصال أحادية الاتجاه. إذا احتاج العميل إلى إرسال تعليمات تحكم أو بيانات جديدة إلى الخادم، يجب إنشاء طلب HTTP عادي منفصل.

4. WebSocket: بروتوكول اتصال مزدوج المسار بالكامل

عما تتضمن سيناريوهات التطبيق تفاعلات ثنائية الاتجاه عالية التردد (مثل ألعاب الحركة متعددة اللاعبين عبر الإنترنت، تحرير المستندات التعاونية الدقيق)، نحتاج إلى تقنية تقلل من تكلفة الاتصال وتحقق اتصالاً مزدوجًا حقيقيًا — WebSocket.

WebSocket هو بروتوكول اتصال شبكي مستقل. يستخدم بذكاء بروتوكول HTTP لإكمال الاتصال الأولي:

  1. مرحلة المصافحة: يرسل العميل طلب HTTP خاصًا، يعلن عن رغبته في الترقية إلى بروتوكول جديد (مع الرأس Upgrade: websocket).
  2. تحول الاتصال: إذا كان الخادم يدعم البروتوكول ويوافق عليه، يرد برمز الحالة 101 Switching Protocols.
  3. حرية كاملة: في هذه المرحلة، تنتهي مهمة مواصفات HTTP، ويتم تسليم اتصال TCP الأساسي إلى بروتوكول WebSocket. منذ هذه اللحظة، يتمتع العميل والخادم بحقوق اتصال مزدوجة المسار بالكامل (Full-Duplex) متساوية، ويمكن لكلا الطرفين إرسال واستقبال إطارات بيانات بتنسيق مبسط في أي وقت.

الخصائص التقنية والقيود:

  • الميزة: يدعم اتصالاً ثنائي الاتجاه في الوقت الفعلي حقيقيًا؛ معلومات رأس إطارات البيانات صغيرة جدًا، مع زمن انتقال منخفض وكفاءة إنتاجية عالية؛ يدعم النقل الأصلي للبيانات الثنائية (ArrayBuffer).
  • العيوب: تعقيد البنية والتطوير أعلى؛ نظرًا للحفاظ على اتصالات طويلة مستمرة، يفرض متطلبات هندسية أكثر صرامة على بنية الخادم واستراتيجيات موازنة الحمل وتصميم مراقبة نبضات القلب.

5. الملخص: مقارنة الاختيار التقني

البُعدالاقتراع القصير (Polling)أحداث الإرسال من الخادم (SSE)WebSocket
اتجاه الاتصالالعميل يجذب البيانات بالاقتراع النشط (أحادي الاتجاه)الخادم يدفع بنشاط بشكل مستمر (أحادي الاتجاه)العميل والخادم يتمتعان بحقوق متساوية في الإرسال والاستقبال (مزدوج المسار بالكامل)
البروتوكول الأساسيHTTP القياسيHTTP القياسيبروتوكول WebSocket مستقل (قائم على TCP)
حمل البياناتمرتفع جدًا (يتضمن رؤوس HTTP كاملة)منخفض نسبيًامنخفض جدًا (رؤوس إطارات بيانات مبسطة)
سيناريوهات التطبيق النموذجيةالتحقق الدوري من حالة إتمام المهام غير المتزامنة في الخلفيةإخراج تدفق أحادي الاتجاه لحوار النماذج اللغوية الكبيرة، دفع إشعارات الأخبار أو النظامإشارات الصوت/الفيديو في الوقت الفعلي، ألعاب متعددة اللاعبين عبر الإنترنت، السبورات والتحرير التعاوني

في الممارسة الهندسية، يجب على المطورين بناءً على متطلبات سيناريو العمل المحدد فيما يتعلق بالقدرة في الوقت الفعلي وتكرار التفاعل ثنائي الاتجاه، الموازنة بين تعقيد صيانة النظام وكفاءة الاتصال، واختيار التقنية الأكثر ملاءمة.