PHP पर WebSocket: A से Z तक real-time एप्लिकेशन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

WebSocket क्या है और PHP में इसकी आवश्यकता क्यों है

\n\n

पारंपरिक HTTP प्रोटोकॉल "अनुरोध-प्रतिक्रिया" योजना पर काम करता है: क्लाइंट अनुरोध भेजता है, सर्वर उसे संसाधित करता है और प्रतिक्रिया लौटाता है। नया डेटा प्राप्त करने के लिए क्लाइंट को बार-बार पेज रीलोड करना पड़ता है या AJAX-polling (सर्वर से समय-समय पर अनुरोध) का उपयोग करना पड़ता है। यह दृष्टिकोण अतिरिक्त लोड पैदा करता है और वास्तविक "लाइव" कनेक्शन प्रदान नहीं करता है।

\n\n

WebSocket (RFC 6455) एक प्रोटोकॉल है जो क्लाइंट (ब्राउज़र) और सर्वर के बीच एक स्थायी द्विदिश कनेक्शन स्थापित करता है। हैंडशेक के बाद, बार-बार HTTP अनुरोधों के बिना डेटा वास्तविक समय में दोनों दिशाओं में प्रेषित किया जा सकता है। यह इसके लिए आदर्श समाधान है:

\n\n
    \n
  • चैट और मैसेंजर
  • \n
  • समाचार फ़ीड और सूचनाएं
  • \n
  • दस्तावेज़ों का सहयोगात्मक संपादन
  • \n
  • गेम और नीलामी
  • \n
  • निगरानी और डैशबोर्ड
  • \n
\n\n

कई लोग मानते हैं कि PHP अपनी तुल्यकालिक प्रकृति के कारण real-time कार्यों के लिए उपयुक्त नहीं है। हालाँकि, Ratchet और ReactPHP जैसी लाइब्रेरी के आगमन के साथ स्थिति मौलिक रूप से बदल गई है। PHP घटना-संचालित आर्किटेक्चर और नॉन-ब्लॉकिंग इनपुट-आउटपुट का उपयोग करके WebSocket के साथ कुशलतापूर्वक काम कर सकता है।

\n\n

PHP पर WebSocket एप्लिकेशन की आर्किटेक्चर

\n\n

कोड लिखने से पहले, यह समझना महत्वपूर्ण है कि PHP सर्वर साइड पर WebSocket कनेक्शन कैसे काम करता है।

\n\n

कनेक्शन स्थापित करने के चरण

\n\n
    \n
  1. HTTP हैंडशेक: क्लाइंट Upgrade: websocket हेडर के साथ एक विशेष HTTP अनुरोध भेजता है। सर्वर Sec-WebSocket-Key की जाँच करता है और स्थिति 101 Switching Protocols के साथ प्रतिक्रिया लौटाता है।
  2. \n
  3. प्रोटोकॉल स्विचिंग: सफल हैंडशेक के बाद, कनेक्शन WebSocket मोड में बदल जाता है। आगे डेटा का आदान-प्रदान बाइनरी फ्रेम के माध्यम से होता है।
  4. \n
  5. डुप्लेक्स संचार: सर्वर और क्लाइंट किसी भी समय संदेश भेज सकते हैं, जब तक कि कनेक्शन किसी एक पक्ष द्वारा बंद नहीं किया जाता।
  6. \n
\n\n

तुल्यकालिक PHP बनाम अतुल्यकालिक PHP

\n\n

सामान्य PHP स्क्रिप्ट तुल्यकालिक रूप से काम करती है: एक अनुरोध - एक प्रक्रिया, प्रतिक्रिया के बाद स्क्रिप्ट समाप्त हो जाती है। WebSocket के लिए लगातार चलने वाली प्रक्रिया की आवश्यकता होती है जो पोर्ट को सुनती है और कई समवर्ती कनेक्शनों को संभालती है। यहीं पर ReactPHP मदद करता है - एक लाइब्रेरी जो PHP के लिए इवेंट लूप लागू करती है।

\n\n

Ratchet लाइब्रेरी ReactPHP के ऊपर बनाई गई है और WebSocket सर्वर बनाने के लिए एक सुविधाजनक इंटरफ़ेस प्रदान करती है। यह सॉकेट के साथ निम्न-स्तरीय कार्य, फ्रेम पार्सिंग और कनेक्शन प्रबंधन को संभालती है।

\n\n

व्यावहारिक कार्यान्वयन: real-time चैट बनाना

\n\n

Ratchet का उपयोग करके WebSocket पर एक सरल चैट बनाने पर विचार करें। इस उदाहरण को किसी भी real-time कार्य के लिए अनुकूलित किया जा सकता है।

\n\n

चरण 1: निर्भरताएँ स्थापित करना

\n\n

सुनिश्चित करें कि आपके पास Composer (PHP के लिए निर्भरता प्रबंधक) स्थापित है। Ratchet और उसकी निर्भरताएँ स्थापित करें:

\n\n
composer require cboden/ratchet
\n\n

चरण 2: हैंडलर क्लास बनाना

\n\n

एक फ़ाइल ChatServer.php बनाएँ जो कनेक्शन और संदेशों का प्रबंधन करेगी:

\n\n
<?php\nnamespace MyApp;\n\nuse Ratchet\\MessageComponentInterface;\nuse Ratchet\\ConnectionInterface;\n\nclass ChatServer implements MessageComponentInterface\n{\n    protected $clients;\n\n    public function __construct()\n    {\n        // SplObjectStorage — कनेक्शन ऑब्जेक्ट को स्टोर करने का सुविधाजनक तरीका\n        $this->clients = new \\SplObjectStorage;\n        echo "सर्वर शुरू हो गया!\\n";\n    }\n\n    public function onOpen(ConnectionInterface $conn)\n    {\n        // नया क्लाइंट कनेक्ट हुआ\n        $this->clients->attach($conn);\n        echo "नया कनेक्शन: {$conn->resourceId}\\n";\n    }\n\n    public function onMessage(Connectio                

ब्लॉग

पुस्तक अनुशंसाएँ