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

ما هو WebSocket؟

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

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

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

في هذه المرحلة ، قد تفكر: "البروتوكول هو مجرد مجموعة من القواعد ، كيف يمكنك استخدام ذلك للتشفير؟".

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

لماذا تم إنشاء WebSocket؟

لتوضيح الحاجة إلى WebSocket ، ضع في اعتبارك الآلية الكامنة وراء الدردشة على الإنترنت.

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

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

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

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

فيما يلي رسم تخطيطي يوضح الاقتراع الطويل:

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

هناك أسلوب آخر للاتصال ثنائي الاتجاه في HTTP يسمى التدفق.

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

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

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

حالات الاستخدام لـ WebSocket

WebSocket رائع ، لكن هذا لا يعني أنه يجب استخدامه في كل مكان.

يمكن أن يضيف تطبيق WebSocket تعقيدًا إلى تطبيقك ، خاصةً على جانب الخادم ، لذلك لا ينبغي أن يتم ذلك إلا إذا كان لديك سبب وجيه. هذا يطرح السؤال: كيف يبدو السبب الجيد؟

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

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

كيفية استخدام WebSocket على جانب العميل

يمكن أن يكون استخدام WebSocket على جانب الخادم متضمنًا إلى حد ما ، وتختلف العملية اختلافًا كبيرًا اعتمادًا على اللغة (مثل سي #, جافا، وما إلى ذلك) والمكتبة المفضلة ، لذلك لن نغطيها هنا. بعد ذلك ، سنناقش بإيجاز كيفية استخدام WebSocket من جانب العميل.

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

يمكنك استخدام تنسيق التعليمات البرمجية التالي لإنشاء كائن WebSocket:

دع exampleSocket = مقبس ويب جديد ("wss: //www.example.com/socketserver", "dummyProtocol");

الوسيطة الأولى للمُنشئ هي URI لخادم WebSocket الذي تريد إنشاء اتصال به. سيبدأ دائمًا بـ "ws" أو "wss". الحجة الثانية اختيارية. قيمته إما سلسلة أو مصفوفة من السلاسل ، والتي تحدد البروتوكولات الفرعية التي تدعمها.

كائن WebSocket له خاصية للقراءة فقط تسمى readyState. يوفر الوصول إلى هذه الخاصية الحالة الحالية لاتصال WebSocket. تحتوي ReadState على أربع قيم ممكنة: "connect" و "open" و "close" و "closed".

عند تشغيل هذا السطر من التعليمات البرمجية ، سيحاول المتصفح الاتصال بالخادم المحدد. لن يكتمل الاتصال في الحال ، لذا ستكون حالة exampleSocket جاهزة "متصلة". لا يمكن إرسال أي رسائل أو استلامها حتى يكتمل الاتصال ، وعند هذه النقطة تصبح قيمة readyState "مفتوحة".

ال المثال الكائن لديه مستمع حدث (والذي يختلف عن مستمعي أحداث DOM) تسمى "onopen" والتي تسمح لك بتنفيذ المزيد من الإجراءات فقط بعد إنشاء الاتصال. يحتوي الكائن أيضًا على طريقة "إرسال" تتيح لك إرسال سلاسل و Blobs (بيانات ثنائية) و ArrayBuffers كرسائل إلى الخادم.

فيما يلي مثال باستخدامهما معًا:

exampleSocket.onopen = وظيفة (حدث) {
exampleSocket.send ("WebSocket رائع حقًا");
};

توفر واجهة برمجة التطبيقات أيضًا طريقة لتتمكن من الرد على الرسائل التي يرسلها الخادم. يتم ذلك مع مستمع الحدث "onmessage". هذا مثال:

exampleSocket.onmessage = وظيفة (حدث) {
وحدة التحكم.سجل(حدث.بيانات);
}

بدلاً من ذلك ، يمكنك أيضًا الكتابة وظيفة السهم:

exampleSocket.onmessage = (حدث) => { وحدة التحكم.log (event.data) ؛ }

يوفر API أيضًا ملف أغلق() طريقة لإغلاق الاتصال. هذا ما يبدو عليه:

المثال.أغلق();

WebSocket يتيح الاتصال ثنائي الاتجاه الفعال

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

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