ما هو ال 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 تعمل بكفاءه عالية وتصلح للمواقع التي عليها ضغط زوار.
الويب سويكت هو بروتكول يوفر قناة اتصال متكامل بمعنى انتقال الرسائل والفيديو والصوتيات عن طريق ال TCP
ميزة الويب سويكت انه اتصال متزامن بمعنى انه يتقبل الاضافات بدون عبئ ثقيل مثل نقل ملفات الفيديو الكبيرة او محادثات الفيديو المستمرة والمحادثات الصوتية المستمرة ايضاً والشات وهذه كلها تحتاج الى ويب سويكت وان استخدمنا ال HTTP سيكون الامر معقد ولكن يجب قبل بدأ اتصال الويب سويكت استخدام مصافحة ال HTTP بين جهاز الخادم والعميل
الويب سويكت تعمل على المتصفح ولكن هذا ليس بالضرورة يمكنك ان تجعلها تعمل داخل تطبيق ان شئت
وهذه مكتبة لدعم الويب سويكت على البي اتش بي
تعاملت مع الويب سويكت في النود جي اس باستخدام مكتبة
وكانت النتائج مبهرة وانصح كل مين يريد بناء تطبيق للشات او نقل الملفات باحجام كبيرة او استخدام الاتصال الصوتي او الفيديو ان يستخدم الويب سويكت
لا ليس مكتبة جافا سكربت بل برمجية لمعظم لغات البرمجة ولكن يفضل استخدامه جاهز "مكتبة" لان برمجته معقدة جداً
بالنسبة socket.io فهي تعمل على Node.js فقط على ناحية السيرفر ام على ناحية العميل فهي تدعم الجافا سكربت والجافا والاوبجكتف سي والمزيد تجدهم هنا
ولكن انتبه هناك فرق بين الكلاينت سايد والسيرفر سايد !
وقد استخدمت دورتهم الرسمية في موقعهم وكانت معقدة بعض الشيء لكنه عمل في الاخير
وكما قلت لك ان كنت تريد استخدامها على سيرفر بي اتش بي فهذه هي المكتبة الافضل
في الويب سويكت هناك جهتين
جهة تبرمج للخادم وجهة تبرمج للعميل
اذا ارد السيرفر انشاء اتصال ويب سويكت مع عميل فيجب ان يرفق للعميل الملفات المساعدة او المكملة للاتصال بالويب سويكت الخاص بالخادم
ساعطيك مثال
انا لدي سيرفر واريد انشاء برنامج شات باستخدام ال PHP
طبعاً PHP تعمل على ناحية الخادم في حالة المواقع لذى سابرمج في البداية ويب سويكت للخادم ثم ويب سويكت للعميل.
على السيرفر ساقوم باستخدام مكتبة socketo.me لانه سيكون صعب جداً بدأ ويب سويكت من الصفر ولان اللغة المستخدمة PHP
بعد تركيب الويب سويكت على الخادم وتجهيزه باللازم حسب المكتبة وكما اتفقنا انه PHP في مثالنا يجب علينا الان تجهيزه للعميل
العميل قد يكون موقع وحينها اقوم بارسال مكتبة socketo.me الخاصة بالعميل على هيئة جافا سكربت وهكذا تم التركيب والاتصال.
شكرا لك على هذا الشرح
يعني احتاج الى استخدام ال socketo.me من الطرفين server و تكتب بال php و client و تكتب بال js
لقد قرأت ان ال node.js هي الاسرع في مجال ال real-time مع socket.io هل يمكنني استعمال ال node.js الى جانب ال php فقط للامور التي تعتبر real-time ؟
انا لا اجيد node.js لكن ساتعلمها ان لزم الامر ، و في حال امكن هل يمكن كتابتها في ملف php واحد كما بالنسبة لل js
آسف على كثرة الاسئلة لكن انا أؤمن ان الطريقة الافضل هي الانسب و ليس الطريقة الاسهل
The WebSocket specification—developed as part of the HTML5 initiative—introduced the WebSocket JavaScript interface, which defines a full-duplex single socket connection over which messages can be sent between client and server. The WebSocket standard simplifies much of the complexity around bi-directional web communication and connection management.
WebSocket represents the next evolutionary step in web communication compared to Comet and Ajax. However, each technology has its own unique capabilities. Learn how these technologies vary so you can make the right choice.
التعليقات