عشان نعرف قد ايه الـ Web Sockets ساعدت بشكل كبير في تطور صناعة البرمجيات محتاجين نبص على المثالين دول:
تخيلوا ان دلوقتي عاوزين نبعت رسالة لحد , فاللي هيحصل كالآتي هنروح نودي الرسالة لمكتب البريد , وبعدين هنفضل مستنين ان الشخص اللي استلمها يرد علينا , والرد ممكن يجي بسرعة وممكن ياخد وقت في بعض الاحيان وده بيعتمد على عوامل كتير زي مثلا المسافة اللي الرسالة دي محتاجة توصل من جهة للتانية وكذلك وقت الـ Processing بتاعها , وهكذا ..
وخلونا نتخيل مثال تاني ان عندنا تليفون أرضي بس بشكل مختلف شوية وهو ان عشان تكلم حد من صحابك محتاج تتصل وتساله سؤال وبعدين تقفل الخط وهو يرجع يتصل بيك يجاوبك على السؤال بتاعك ويسالك اللي هو عاوزه , وبعدين يقفل وتتصل تاني وترد عليه ..
الـ Paradigm في المثالين اللي فاتوا هو الـ HTTP Request Response وده التقليدي واللي بيتم استعماله في اغلب التطبيات حاليا .. وبكل بساطة الـ Client بيبعت Request للـ Server والـ Server يرد على الـ Client من خلال Response.
الفرق بين الـ WebSockets والـ HTTP Req/Res
الـ WebSockets جت عشان تسمح بمشاركة البيانات بين الطرفين بشكل بيحصل in-real time بمعنى ان دلوقتي باه عندي وسيلة تواصل ثنائية الاتجاه او بنقول عليه Bi-Directional Communication وده معناه ان دلوقتي اصبح عندي الـ Server والـ Client الاتنين يقدروا يكلموا بعض في نفس الوقت.
خلونا نرجع لمثال الرسالة بتاعة مكتب البريد , بدل ما كنا هنبعت الرسالة ونستنى وقت ما معين لحد ما يجيلنا الرد , دلوقتي باه عندنا Messenger نقدر من خلاله نبعت الرسالة ونحصل على الرد بشكل لحظي ونتكلم في نفس الوقت مع بعض من غير منبعت كل شوية رسالة ونستنى الرد عليها.
وبالنسبة لمثال التليفون فاحنا في وقتنا الحالي نقدر نتكلم في التليفون احنا الاتنين في خط واحد ونسمع بعض ونتكلم في نفس الوقت
هو ده فرق الـ WebSockets عن البروتوكول التقليدي للـ HTTP Request Response.
اي هي الـ Web Sockets ؟
هي عبارة عن Communication Protocol مزدوجة الاتجاه بنقول عليها Full-Duplex Communication Channels وده كله من خلال TCP Connection واحد بس. وبالتالي بتسمح بعملية الـ Real-time والـ Event-Driven Connections بين الـ Client والـ Server.
وعشان كده هنعرف كمان شوية في استعمالاتها انها كويسة اوي مع الـ Paradigms دي جدا.

بنستعمل الـ Web Sockets في ايه ؟
احنا بنستعملها في التطبيقات وصناعة الـ Software اللي بتحتاج تحديث لحظي واستجابة لحظية بين طرفين زي:
- الـ Real-time chats
- الـ Messaging / Notifications
- الألعاب الـ Multiplayer
فلو جينا نبص تاني للـ Request Response Model هنلاقي ان زي ما قولنا الـ Client بيبعت الـ Request للـ Server ومن ثم الـ Server بيرد بالبيانات اللي محتاجاها الـ Client في الـ Response , والنوع ده هنلاحظ انه بيتطلب عملية Polling بشكل مستمر من جهة الـ Client للـ Server واللي بالتاكيد ممكن تؤدي لـ Latency وكفاءة أقل.
فعملية الـ Polling دي هتطلب كل شوية من الـ Client انه يروح يشوف الـ Server عنده البيانات اللي عاوزها ولا لا , وده Paradigm مختلف عن الـ WebSockets تماما , وممكن نبقى نتكلم في ورقة تانية عن أنواع الـ Polling والفروقات بينهم.
ازاي الـ WebSockets بيشتغل ؟
الـ WebSockets بتعمل Persistent Connection بين الـ Client والـ Server , وده معناه ان مجرد مالـ Connection يتفتح , الاتنين يقدروا يبعتوا البينات لبعض في اي وقت من غير اي عملية Polling مستمرة وبالتالي الـ Paradigm ده بيسمح بالـ Real-time Communication وان التحديثات تتبعت ويتم استقبالها بشكل لحظي.
والـ WebSockets Connections هي بتكون Asynchronous بشكل كامل يعني غير متزامنة , ومهم اننا نعرف ان ليها Uniform Resource Identifier URI زيها زي الـ http / https وهي الـ ws: او الـ wss
لو جينا نبص على مثال الـ Chat Applications هنلاقي ان الـ User يقدر يبعت رسايل زي مهو عايز واللي في دورها بتوصل بشكل لحظي لكل الناس اللي عاوز يبعتهالهم , وفي نفس الوقت يقدر يستقبل رسايل منهم بدون ما يضطر يروح كل شوية يعمل Polling أو Refresh عشان يستقبل التحديثات دي وده بيؤدي الى تجربة فريدة من نوعها في النوع ده من التطبيقات.
ايه هي عيوب الـ WebSockets ؟
شوفنا مع بعض استعمالات الـ WebSockets وازاي بتشتغل , ولكن على الرغم من فوايدها واستعمالاتها المميزة والتجربة الفريدة اللي بتقدمها الا ان ليها بعض العيوب زي :
- Browser Support : وده لان المتصفحات الحديثة بس هي اللي بتدعم نوعا ما النوع ده من البروتوكولات , ولكن المتصفحات القديمة ممكن تواجه مشكلة في التعامل مع النوع ده من البروتوكولات , وده بيتطلب شغل زيادة وآليات زيادة لمعالجة ده.
- Scalability : زي ما شوفنا الـ WebSockets بتفضل محافظة على Persistent Connection بين الـ Client والـ Server وبالتالي ده بيستهلك من الـ Resources في لحظة اننا بقينا بنتعامل مع عدد كبير من الـ Concurrent Connections اللي مفتوحة وبيتم استعمالها. وبالتالي ده بيتطلب معرفة قوية وخبرة في التعامل مع النوع ده من المشاكل زي اننا نعمل Load Balancing بشكل كويس ونكون عارفين آليات للتعامل مع الـ Resource Management عشان نضمن اننا نقدر نـ Scale التطبيقات دي بدون مشاكل.
- Stateful : على نقيض الـ Request Response Model , واللي بطبعه الـ HTTP بيكون Stateless يعني مش محتاج يحتفظ بأي State , فهنا الـ WebSockets هي عبارة عن Stateful بطبيعتها وده لانها محتاجة تفضل محافظة على الـ Connection بين الطرفين ويكون الـ Server عارف انهي Client هو Connected ليه وبالتالي ده بيستهلك Memory Usage
- Security : بما ان فيه عندنا دلوقتي Connections مفتوحة فاحنا محتاجين يكون فيه Security مشدد ضد هجمات الـ Cross-Site Scripting XSS والـ Cross-Site Request Forgery CSRF , واصبح حاليا محتاجين نضمن استعمال بروتوكول Web Socket مؤمن من خلال الـ wss واللي بيستعمل SSL/TLS عشان نضمن خصوصية وآمن البيانات.
في الختام
الـ WebSockets زيه زي أي Protocol للتواصل , بيقدم مميزات وليه عيوب , والشطارة هي اننا نفهم متطلبات الـ Business ونقرر اذا كان وجوده مفيد ولا لا , ونكون فاهمين ومتسعدين للتحديات اللي ممكن نواجهها , وفي بعض الاحيان بيكون كويس جدا ان يكون عندنا خطة بديلة زي الـ HTTP Streaming أو الـ Long Polling في الظروف اللي مش هيكون الـ WebSockets فيها متاح ومدعوم.
Discussion