هل تساءلت يوماً كيف يمكن لتطبيقات الدردشة أو الخرائط أو الألعاب عبر الإنترنت أن تتفاعل معك في الوقت الحقيقي دون أي تأخير؟
في عالم مليء بالتكنولوجيا المتطورة، تبرز تقنية WebSocket كحل سحري.
لكن ماذا عن التحديات التي قد تواجهها؟ هل هي حقاً الخيار الأمثل لهذه التطبيقات؟
ما الآلية التي تعمل بها؟
دعونا نستكشف معاً هذا العالم المثير.
فتخيّلوا لو أن حاسوبين يتحادثان كما نفعل نحن الآن، لكن بدلاً من الكلمات، يتبادلان البيانات! ما الوسيلة التي تتيح لهما هذا التبادل؟
إنها (Socket)، وهي أشبه بخط هاتف رقمي يصل بين جهازين على الشبكة. وللحديث أكثر عن هذه التقنية،
في تاريخ 12 أكتوبر من العام 2024،
قدم المهندسان أحمد الشهال وحمزة عمار جلسة مميزة ضمن تجمع مطوري تطبيقات الهواتف المحمولة الذي تستضيفه مؤسسة سند الشباب التنموية في كل شهر، حيث قاما بعرض شامل عن تقنية WebSocket وسلطا الضوء على العديد من المحاور والإشكاليات التي قد يتم اللبس بينها من حيث المفاهيم.
الفهرس
- ما هو Web Socket لماذا نختاره؟
- الفرق بين الـ Socket و WebSocket و Socket.IO؟
- كيف يعمل Socket.IO؟
- إيجابيات وسلبيات Socket.IO
- الفرق بين Socket.IO و RESTful APIs؟
- أمثلة واقعية
محاور الجلسة
أولاً: ما هو WebSocket ولماذا نختاره؟
الـ Socket هي واجهة برمجية تُستخدم لتبادل البيانات بين جهازين عبر الشبكة.
تمكِّن البرامج من الاتصال ببعضها البعض (محليًا أو عبر الإنترنت) باستخدام بروتوكولات مثل TCP أو UDP ويتم اختياره ل سببين رئيسين ألا وهما :
Real Time Communication
عندما يتم إنشاء اتصال WebSocket لأول مرة كل من ال client وال Server يمكنهما ارسال واستقبال الرسائل Real time way In .
Bidirectional Communication
تمكين الاتصال في اتجاهين بين العميل والخادم عبر اتصال واحد. يمكن لكلا الجانبين إرسال واستقبال الرسائل ب حرية ، مما يجعلها مثالية للتحديثات اللحظية والتطبيقات التفاعلية مثل الدردشة أو الإشعارات في الوقت الفعلي.
ثانياً: الفرق بين ال Socket و WebSocket و Socket IO ؟
| Socket IO | WebSocket | Socket |
| هي مكتبة 3D Party مبنية على بروتوكول WebSocket، وتتوفر لها تطبيقات في معظم اللغات والأطر الشهيرة على جانب العميل والخادم. عادةً ما نستخدم Socket.IO بدلاً من WebSocket بسبب الميزات المضمنة والموثوقة التي تقدمها. | هو عبارة عن بروتوكول وليس تطبيق بل هو بحاجة إلى مكتبة لتنفيذه والفرق الجوهري بين WebSocket و Socket هو أن اتصال ال Socket يتم إغلاقه بمجرد انتقال البيانات . | يشير عموماً إلى كل شبكة تطلب فتح اتصال Socket لأرسال واستقبال البيانات من وإلى الخادم وهي على نوعين TCP Sockets و UDP Sockets |
ثالثاً: كيف يعمل Socket.IO ؟
يطلب العميل Client فتح اتصال مع الخادم Server ويكون هذا الاتصال عبارة عن قناة channel بين العميل والخادم حيث يتم التخاطب بينهما عن طريق Events حيت تم إعطاء مثال تقريبي ك نهر بين الطرفين (Client & Server) يوجد فيه قارب يحمل لنا ما يسمي ب Event وهذا القارب ينتقل بينهما ذهاباَ وإياباً وهذا كان مما دعم لنا تصورنا عن فكرة ال Channel وكيف يعمل هذا الاتصال .

رابعاً: إيجابيات وسلبيات Socket.IO
تتيح Socket IO للمطورين إنشاء اتصالات ثنائية الاتجاه، مما يعني أن البيانات يمكن أن تُرسل من الخادم إلى العميل والعكس في أي وقت. هذا يساهم في تحسين تجربة المستخدم، حيث يمكن للمستخدمين رؤية التحديثات والتغييرات في الوقت الحقيقي دون الحاجة لتحديث الصفحة ومع ذلك، مثل أي تقنية، تأتي Socket.IO مع مجموعة من الإيجابيات والسلبيات التي يجب أخذها في الاعتبار عند اتخاذ قرار استخدامها في مشروع وهذا ما تم استعراضه خلال الجلسة ومناقشته مع الحضور :
الإيجابيات :
- إعادة الاتصال التلقائي : ميزة في Socket.IO لإعادة الاتصال بين العميل والخادم تلقائيًا إذا انقطع. تساعد في تقليل فقدان البيانات وضمان استمرار الاتصال.
- الحدث المؤقت : يعني الأحداث المخزنة مؤقتًا عندما لا يكون هناك اتصال بين العميل والخادم. في Socket.IO، إذا كان العميل غير متصل عند إرسال حدث، يمكن تخزينه وإرساله تلقائيًا عند استعادة الاتصال. هذا يضمن عدم فقدان البيانات أو الرسائل المهمة.
- Acknowledgment: هو آلية تستخدم في Socket.IO للتأكد من أن حدثًا معينًا قد تم استلامه ومعالجته بنجاح من قبل الطرف الآخر (العميل أو الخادم). عندما يرسل أحد الأطراف حدثًا، يمكنه أيضًا تحديد دالة callback function تُنفذ عندما يتلقى الطرف الآخر الحدث. هذا يتيح للطرف المرسل التأكد من أن الحدث قد تم استلامه والتعامل معه بشكل صحيح.
- Room-based Communication:هي خاصية في Socket.IO تسمح بتقسيم الاتصالات إلى “غرف”. يمكن للعميل الانضمام إلى غرفة معينة للتواصل مع مجموعة محددة من العملاء فقط، مما يفيد في تطبيقات مثل الدردشة حيث يمكن لمجموعة من المستخدمين التحدث معًا دون تداخل مع آخرين.
السلبيات :
التوافق: للتواصل باستخدام Socket.IO بين العميل (مثل متصفح الويب) والخادم، يجب أن يكون كلاهما يستخدمان مكتبة Socket.IO. إذا كان لديك عميل يستخدم WebSocket أو بروتوكول آخر، فلن يتمكن من التواصل مع خادم يستخدم SocketIO
خامساً: الفرق بين Socket.IO و RESTful APIs؟

| RestfulAPIs | Socket IO |
| -تعتمد على طلبات HTTPمثل GET وPOST وPUT وDELETE كل طلب يتطلب اتصالاً جديدًا، مما يعني أن كل تفاعل يتطلب عملية جديدة. هذا يجعلها أقل كفاءة في حالة التحديثات المتكررة. -مناسب للتطبيقات التي تتطلب تفاعلات بسيطة وغير متكررة، مثل استرجاع البيانات من الخادم أو إرسال بيانات جديدة. يستخدم بشكل واسع في التطبيقات التي تعتمد على CRUD – عادة ما تكون أبسط وأسهل في الفهم والتنفيذ، حيث تعتمد على مبادئ HTTP المعروفة. يمكن للمطورين استخدام أدوات مثل Postman لاختبار واجهات REST بسهولة. | -يوفر اتصالًا مستمرًا بين العميل والخادم، مما يسمح بتبادل البيانات في الوقت الفعلي دون الحاجة إلى إعادة تحميل الصفحة أو إرسال طلب جديد. هذا يعني أن البيانات يمكن أن تُرسل وتُستقبل بشكل مستمر في أي وقت. – مثالي للتطبيقات التي تحتاج إلى تحديثات في الوقت الفعلي، مثل تطبيقات الدردشة، الألعاب متعددة اللاعبين، أو أي تطبيق يحتاج إلى تبادل بيانات سريع ومستمر. -قد يكون أكثر تعقيدًا في الإعداد والتطوير بسبب الحاجة إلى إدارة الاتصالات المستمرة. يجب على المطورين التعامل مع حالات الاتصال والانفصال وإعادة الاتصال. |
سادساً: أمثلة واقعية
هناك العديد من التطبيقات التي تسخدم socket IO ومنها :



الختام
نود التأكيد على أهمية التقنية في تعزيز التواصل وتسهيل الوصول إلى المعلومات. إن التطور التكنولوجي يلعب دورًا حيويًا في تحسين جودة الحياة وزيادة الإنتاجية في مختلف المجالات. لذلك، من الضروري أن نستمر في استكشاف كيفية الاستفادة من هذه التقنيات بشكل فعال.
نحن أيضًا مهتمون بآراء الجميع حول الموضوعات التي تم مناقشتها. إن وجهات نظركم وتجاربكم الشخصية تعتبر قيمة جدًا، ونود أن نسمع أفكاركم وملاحظاتكم حول كيفية استخدام التقنية بشكل أفضل في حياتنا اليومية ومجالات عملنا. شكرًا لكم جميعًا على مشاركتكم، ونتطلع إلى الاستماع إلى آرائكم!
روابط ذات صلة
- https://github.com/ahmadshahal/Socket.io-Template-Flutter
- https://github.com/ahmadshahal/Socket.io-Template-Android
ألبوم الصور
اكتشاف المزيد من Mobile Dev Meetup
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.