ما هو ال web sockets ؟
لماذا نستخدمه و ما ابرز استخداماتهl؟
هل يدعم جميع المتصفحات؟
ما هو مبدأ عمله و طريقة تنفيذه؟
هل يعمل مع ال php بشكل جيد؟
قبل ظهور الـ web socket عندما تريد استخدام الويب، البرتكول الوحيد المستخدم لاستعراض صفحات الانترنت على المتصفح هو http، مبدأ عمل هذا البرتكول قائم على ان العميل Client يقوم بإرسال الطلب Request ثم السيرفر يقوم بالرد Response فقط، بمعنى ان السيرفر لا يستطيع ان يرسل طلب Request وال Client لا يستطيع ان يستقبل طلبات ويرد عليها، مع تطور التقنيات هذا السيناريوا اصبح عقيم ولا يلبي المتطلبات، تخيل انك تتراسل مع صديقك عبر الشات وارسلت رسالة هذه الرسالة ذهبت الى السيرفر ويفترض بها بعد ذلك ان تذهب الى صديقك الي هو عبارة عن Client لكن السيرفر لا يستطيع ان يرسل هذه الرسالة الى الكلاينت.
فكانت تستخدم طرق مثل AJAX Polling او Long-Polling او Short-Polling لكن كل هذه الطرق كانت تعتمد على ان الكلاينت هو من يرسل الطلب والسيرفر يرد، فكانت مجرد ترقيعات بسيطة لا تلبي كثير من المتطلبات، فقاموا بتعديل هذا السيناريوا وأتاحوا للسيرفر والكلاينت بأن يقوما بعمل Request و Response ، وظهرت مفاهيم جديدة تنتهج هذا السيناريوا مثل Server Sent Events - SSE و الـ Websocket اتاحت هذه التقنيات للمطورين من بناء تطبيقات تعمل في الوقت الحقيقي Real-time ، تقنية SSE تتيح للسيرفر فقط بأن يرسل Request للكلاينت وتستخدم في التطبيقات البسيطة لارسال بيانات بسيطة، وكثير من المواقع اليوم تستخدم هذا الامر مثل الفيسبوك وتويتر، تلاحظ في الفيسبوك مثلا عندما يقوم شخص بالتعليق على منشور لك يصلك تنبيه في نفس اللحظة التي قام صديقك بالتعليق بدون ان تعمل تحديث للصفحة، هذا الامر يتم عبر SSE وكثير من المتصفحات تدعم هذه التقنية، لكن ماذا لو اردت عمل محادثة عبر الفيديو هنا طبعا البيانات ستكون كبيرة والمزامنة يجب ان تكون سريعة لهذا جاءت الـ Websocket ، هذه التقنية تختلف عن البقية هذه عبارة عن برتكول وجد لجعل السيرفر والكلاينت يقوموا بإرسال Request و Response في نفس الوقت بكفاءة عالية، وهو في الحقيقة عبارة عن وسيط مابين برتكول TCP وبرتكول http، يستخدم في التطبيقات التي بحاجة ان يكون هناك اتصال غير منقطع مابين السيرفر والعميل، مثل محادثات الفيديو والالعاب، وللاسف لاتزال هذه التقنية حديثة و غير مدعومة من كثير من المتصفحات.
بإمكانك طبعا استخدام هذه التقنيات مع PHP او اي لغة اخرى.
شكرا لك شرح وافر
اذا الافضل في حال اردت عمل اشعارات او محادثة استخدام ال SSE كون ال socket غير مدعوم من جميع المتصفحات.
هل يمكنك ان تذكر المتصفحات التي يدعمها؟
جميع المتصفحات تدعم SSE ماعدا Internet Explorer
راجع هذا الرابط لتأخذ لمحة مختصرة عن استخدام الـ SSE بلغة PHP وكذلك المتصفحات التي يدعمها
بالنسبة لل websocket في موقع socket.io مكتوب انها تدعم جميع المتصفحات.
في حال ان كان عدد المتواجدين في الموقع كبير ايهما اخف من ناحية الضغط على السيرفير SSE او websocket ؟
الـ socket.io ليس هو نفسه websocket هناك أختلاف، الـ socket.io هو framework موجهة للـ Node.js هدفها عمل تطبيقات تعمل في الوقت الحقيقي real-time ممكن عن طريقها تستخدم websocket او تقنيات مختلفه مثل flash - JSONP polling, AJAX long polling ، ومدعومة من كثير من المتصفحات، اما websocket هو برتكول صحيح تدعمه كثير من المتصفحات لكنه لايزال جديد، في اطر عمل Framework كثيرة ممكن تسهل لك التعامل مع الـ websocket مثل هذا إطار Ratchet موجه للغة PHP.
أعتقد انه الى الان الـ Node.js توفر أفضل الحلول لبناء تطبيقات real-time تعمل بكفاءه عالية وتصلح للمواقع التي عليها ضغط زوار.
التعليقات