ما هو الـ Websocket و ما إستخداماته ؟ إليك كل ما تحتاج معرفته عنه

ما هو الـ Websocket و ما إستخداماته ؟ إليك كل ما تحتاج معرفته عنه

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

ما هو الـ Websocket و ما إستخداماته ؟ إليك كل ما تحتاج معرفته عنه


- أصل المشكل و الحلول الممكنة : 

لتفهم الـ Websocket يجب ان تكون لديك بعض المفاهيم القبلية عن طرق التعامل مع الإرسال والإستقبال بين كل من المستخدم و الخادم، لذلك سنعود بك قليلا لأصل المشكل الى حين ظهور الـ WebSocket، في بداية الأمر و بظهور بروتوكول الـ Http، إستطعنا أخيرا التواصل مع الخادم و ذلك عبر إرسال طلب (Request) من طرف المستخدم (Client) ثم إستقبال رد من الخادم على ذلك الطلب، فمثلا إن اتجهت لجوجل، تقوم بالكتابة في مربع البحث عبارة بحث و لنقل مثل " أكوا ويب "، تذهب هذه العبارة لخوادم جوجل طلب من المستخدم، ثم تعود النتيجة على شكل رد لذلك الطلب لتظهر لك نتائج البحث. 
بعد ظهور الـ Http 2، عالجت لنا هذه الأخيرة مشكلة كبيرة، فقد كانت النسخة الأولى تسمح بإرسال و إستقبال طلب واحد في كل مرة، بينما الـ Http2 وفرت لنا إمكانية إرسال و إستقبال عدة طلبات دفعة واحدة، تخيل معي انك في مقهى و تطلب من النادل ان يجلب لك كأس ماء، و بيتزا، بعض الملح، و عصير، في الـ Http النسخة القديمة سيقوم النادل بجلب الماء، ثم يعود لجلب البيتزا، ثم يعود لجلب الملح ثم العصير، بينما في الـ Http 2 سيعود النادل بكل طلباتك دفعة واحدة. 
حتى الآن كان التعامل جيدا بين الطلب و الإرسال، لكن ظهرت مشكلة أخرى، ماذا لو أردنا ان نرسل من الخادم (Server) الى المستخدم (Client) دون الحاجة الى الـ Request او الطلب ؟ ماذا لو جلست في المطعم و جاء النادل مباشرة بطلباتك دون الحاجة الى ان تخبره بذلك ؟ هنا انبثق المشكل، بحث توجب دائما على المستخدم ان يرسل طلباً من أجل ان يحصل على على النتائج، و لا يمكن الحصول على النتائج دون القيام بعملية الطلب، مما يعني ان المستخدم عليه إعادة تحميل الصفحة مثلا او النقر او اي شيئ من أجل ان يحصل على نتيجة. 
قمنا بحل هذا المشكل لاحقا بإستخدام بعض التقنيات مثل Ajax التي تسمح لنا بالقيام بالأمر، لكنها ليست متكاملة، لازلنا نحتاج الى طريقة لنستطيع من خلالها الإستقبال (Response) دون حدوث الـ Request. 
هنا ظهرت تقنية أخرى كذلك و هي الـ Server Sent Events او إختصاراً بالـ SSE التي تساعدنا على الإستقبال دون الطلب، و يمكن من خلالها إنشاء برامج محادثة تلقائية (Real Time) بحيث يمكن إستقبال الرسائل مباشرة دون تحديث للصفحة او غيرها، نفس النمط في التوصل بالإشعارات او ظهور التعليق الخاص بك مباشرة او التغريدة الخاصة بك مباشرة دون تحديث للصفحة. 

- ما هي الـ Websocket و ما إستخداماته : 

الـ SSE كان الحل الأمثل، إلا انه لازال ينقصه الكثير، فهو ليس كفيلا بالتعامل مع قدر كبير من البيانات و المعلومات، لذلك جائت الـ Websocket لحل هذا المشكل نهائيا، بحيث تتيح لك هذه الاخيرة بناء تطبيقات مختلفة تعتمد على التعامل مع البيانات بشكل Real Time مهما إشتدت ضخامتها ( مثل إرسال الملفات او إجراء محادثات فيديو او صوتية، التعامل مع الجرافيك ... )، يتم إستخدام الـ Websocket كذلك في تطوير الألعاب اونلاين او البرامج التي تتطلب دائما الإبقاء على إستماع بكل ما يحدث بين الخادم و المستخدم، جل المنصات اليوم تستخدم الـ Websockets سواء بطريقة مباشرة او غير مباشرة مثل فيسبوك و جوجل و غيرها، و ذلك لضرورتها و سهولتها التي جلبت معها أيضا في التعامل مع البيانات من إرسال و إستقبال بخفة و سرعة، هنا نستذكر ان الـ Websocket ليس بلغة برمجة او إطار، بل هو عبارة عن بروتوكول، يمكننا ان نقول انه يدمج بين كل من الـ TCP و الـ HTTP معاً، مدعم من طرف العديد من المتصفحات و البرمجيات كذلك. 

و لا نغفل كذلك على ان التعامل مع الـ Websocket يتم عبر نمطين، التعامل عبر المستخدم و السيرفر (Client / Server) و التعامل عبر الخادم و الخادم (Server / Server) و لكل واحدة منهما طرق التعامل الخاصة بها 

- إطارات تستخدم الـ Websocket : 

يمكنك البدئ مباشرة بإستخدام الـ Websocket بإدارجها في أي لغة برمجة، فمثلا إن كان مشروعك مبني على الجافاسكربت، او الـ Php، او الـ Ruby او اي شيئ آخر فيمكنك إدراج التعامل مع الـ Websocket، إلا انه من أجل الحصول على أريحة شديدة في التعامل و سهولة كذلك في الوصول للمطلوب، يمكنك اللجوء الى بعض الإطارات توفر لك خصائص أكثر و سهولة أكثر في التنفيذ، من بينها : 
  • Socket.IO : قد يكون أشهر إطار لبناء برمجيات تعتمد على الـ Websocket، و هو إطار للـ Node js يمكن إستخدامه لبناء برمجيات مختلفة مثل برمجيات الشات و المراسلة بشكل حي . 
  • Socket Cluster : هو الآخر إطار للـ Node js تستطيع من خلاله بناء برمجيات حية Real Time، و هو أيضا إطار مفتوح المصدر. 
  • uWebsocket : او مايكرو Websocket، و هو كذلك إطار يمكنك من خلاله بناء برمجية تعتمد على نمط الـ Real Time بالتراسل بين الخادم و المستخدم، مدعم و مستخدم من طرف بعض الشركات الشهيرة مثل Coinbase في إظهار التعاملات و سعر العملات المشفرة بطريقة مباشرة. 
  • Deepstream : إطار آخر للـ WebSocket قوي في عمله يمكنك من خلاله بناء برمجيات مختلفة و يدعم الإتصال مع مختلف قواعد البيانات مثل MongoDb, Mysql و غيرها، و يمكن تنصيبه كذلك على أي نظام و الإشتغال المباشر به. 
  • Primus : هو ليس بالضبط إطار، و إنما تقنية تضم مجموعة من الإطارات داخلها التي تدعم الـ Websocket مثل SockJs و EngineIO و غيرها، و يمكنك إستدعاء و إستخدام أي تقنية مباشرة، يدعم التنصيب عبر الـ Npm .