العربية
  • بروتوكول HTTP
  • بروتوكول WebSocket
  • تطبيق ويب
  • TCP
  • اتصال العميل بالخادم

HTTP مقابل WebSocket

تُقارن هذه المقالة بين بروتوكولات HTTP و WebSocket، موضحةً الفروق الرئيسية بينها، وميزاتها، والحالات المثلى لاستخدامها. توفر للمطورين رؤى لاختيار البروتوكول الصحيح لتطبيقات الويب الخاصة بهم، مما يبرز نموذج طلب رئيسي لـHTTP مع إمكانيات التواصل الثنائي في الوقت الفعلي لـWebSocket.

Darcy Ye
Darcy Ye
Developer

أساس العالم الرقمي بأسره هو التواصل بين الآلات. يقوم العملاء المعتمدون بإنشاء طلب، والذي يتلقاه الخادم ويفسره ويوفر استجابة مناسبة. هذا هو الفهم الشائع للتواصل الرقمي بالنسبة للأشخاص العاديين. ومع ذلك، فإن العمل خلف الكواليس معقد ومضنٍ.

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

إن توضيح هذين الاثنين، وتشابهاتهما، ووظائفهما، والجوانب الأخرى مهم لضمان أن يتم اختيار الخيار الصحيح بناءً على الاحتياجات الفعلية.

تقديم HTTP

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

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

تشمل بعض الميزات الرئيسية لـHTTP:

  • بدون حالة
  • يمكن أن يعمل بناءً على البروتوكولات الموجهة للاتصال (مثل SCTP و TCP)
  • يتم ترميز المعلومات في ASCII
  • تشمل المكونات الرئيسية لطلب HTTP إصدار HTTP (HTTP/1.1, HTTP/2, HTTP/3)، الطريقة، عنوان HTTP، معلومات المضيف والرسالة

ما هو WebSocket؟

WebSocket هو بروتوكول اتصالات يمكن أن يحقق تواصل ثنائي الاتجاه في الوقت الفعلي بين العميل والخادم.

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

تشمل بعض الميزات الرئيسية لـWebSocket:

  • يعتمد على اتصالات TCP الدائمة، التي تظل مفتوحة حتى يقوم العميل أو الخادم ببدء طلب إنهاء
  • بناءً على بروتوكول HTTP، جميع طلبات WebSocket تُرسل عبر بروتوكول HTTP القياسي ومن ثم تُعرف على أنها ترقية بمعلومات عناوين محددة على الجانب الخادم
  • بروتوكول WebSocket يعتمد على الأطر (حزم البيانات)، يمكن تقسيم حزمة البيانات كاملة إلى عدة أطر، كل إطار يحتوي على جزء من البيانات ومعلومات العنوان

العلاقة بين HTTP وWebSocket

من المقدمة أعلاه، يمكننا أن نرى أن كلاً من بروتوكولي HTTP و WebSocket:

  • يستخدمان بروتوكول TCP لنقل البيانات
  • يُستخدمان للتواصل بين العميل والخادم

يمكننا أن نُظهر بطريقة أكثر وضوحًا الفروق بين HTTP و WebSocket من خلال الجدول التالي.

HTTPWebSocket
يُنشئ اتصالاً جديدًا لكل طلب (ما لم يتم استخدام اتصال HTTP طويل الأمد، مثل HTTP/1.1 Keep-Alive)، ويتم إغلاق الاتصال بعد انتهاء الاتصاليبقى الاتصال مفتوحًا بعد إتمام المصافحة الأولية بنجاح ما لم يُغلق بنشاط أو يحدث خطأ
وضع التواصل أحادي الاتجاه، يرسل العميل الطلب، ويرد الخادم بالاستجابة، تتطلب كل اتصال جديد إعادة إنشاء الاتصالوضع التواصل ثنائي الاتجاه، بعد إنشاء الاتصال، يمكن للعميل والخادم إرسال البيانات في أي وقت دون إعادة إنشاء اتصال
تتطلب كل اتصال إرسال عناوين الطلب والاستجابة الكاملة، وبالتالي فإن العبء كبير للاتصالات المتكررة بالرسائل القصيرةبعد إنشاء الاتصال، يكون نقل البيانات أخف، لا حاجة لإرسال معلومات العنوان في كل مرة، مناسب لاحتياجات التواصل المتكرر والمنخفض الكمون
يُستخدم بشكل رئيسي لنقل البيانات المستقرة نسبيًايُستخدم بشكل رئيسي لنقل البيانات في الوقت الفعلي
نظرًا للحاجة إلى إعادة إنشاء الاتصالات لكل طلب وحمل المعلومات اللازمة عبر العناوين، إلخ، يتأثر كفاءة استخدام النطاق الترددي وسرعة الاستجابةالاتصالات المستمرة تُلغي خطوات إنشاء الاتصال والمعلومات اللازمة لكل طلب، مما يؤدي إلى خفض الكمون وزيادة كفاءة استخدام النطاق الترددي
تتسبب الطلبات المتكررة في التأثير على الأداءلا تؤثر الطلبات المتكررة على الأداء

كيف تختار البروتوكول المناسب لاستخدامه؟

بناءً على المقارنة بين مزايا ومساوئ HTTP و WebSocket في القسم السابق، يمكننا تقييم سيناريوهات الاستخدام من بُعدين مختلفين:

  1. هل تتغير البيانات بسرعة، وهل يعتمد العمل على البيانات في الوقت الفعلي
  2. هل يتضمن تواصل ثنائي الاتجاه متكرر

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

لا يحتاج Logto's Admin Console إلى الحصول على استخدام الموارد الحالي للمستخدم الذي قام بتسجيل الدخول بشكل متكرر، لأن الموارد تغير الحالة فقط عندما يقوم المستخدمون بتعديل التكوينات. يحتاج فقط إلى إعادة اكتساب حالة الموارد في الوقت المناسب عند قيام المستخدمين بالعمليات على الموارد. من هذا المنظور، HTTP مناسب جدًا لسيناريو استخدام Logto Admin Console. وبالمثل، بالنسبة لمعظم لوحات معلومات الخدمات السحابية، يمكن اختيار HTTP كبروتوكول الاتصال بين اللوحة والخادم.