WebSocket क्या है और PHP के लिए Ratchet लाइब्रेरी की आवश्यकता क्यों है?
\nWebSocket एक प्रोटोकॉल है जो क्लाइंट (ब्राउज़र) और सर्वर के बीच एक स्थायी द्वि-दिशात्मक कनेक्शन प्रदान करता है। क्लासिक HTTP के विपरीत, जहां अनुरोध केवल क्लाइंट द्वारा शुरू किए जाते हैं, WebSocket सर्वर को अनुरोध की प्रतीक्षा किए बिना तुरंत डेटा भेजने की अनुमति देता है। यह चैट, रियल-टाइम सूचनाओं, ऑनलाइन गेम, ट्रैकर्स और किसी भी एप्लिकेशन के लिए एक आदर्श समाधान है जहां कम विलंबता महत्वपूर्ण है।
\nमानक PHP में WebSocket के लिए अंतर्निहित समर्थन नहीं है, लेकिन Ratchet लाइब्रेरी (जो ReactPHP घटक का उपयोग करती है) इस कमी को पूरा करती है। Ratchet एक एसिंक्रोनस लाइब्रेरी है जो PHP से सीधे WebSocket सर्वर चलाने की अनुमति देती है, बिना ब्लॉकिंग के एक साथ कई कनेक्शनों को संभालती है।
\n\nRatchet की मुख्य विशेषताएं
\n- \n
- एसिंक्रोनस — ReactPHP पर आधारित, डेटा की प्रतीक्षा करते समय थ्रेड को ब्लॉक नहीं करता। \n
- प्रोटोकॉल समर्थन — WebSocket (RFC 6455), साथ ही HTTP घटक (हाइब्रिड एप्लिकेशन के लिए)। \n
- सरलता — सर्वर चलाने के लिए न्यूनतम कोड। \n
- स्केलेबिलिटी — क्लस्टर में काम करने के लिए ZeroMQ या Redis के साथ जोड़ा जा सकता है। \n
- संगतता — अंतर्निहित WebSocket ऑब्जेक्ट के माध्यम से किसी भी आधुनिक ब्राउज़र के साथ काम करता है। \n
Ratchet की स्थापना
\nस्थापना Composer के माध्यम से की जाती है। प्रोजेक्ट रूट में टर्मिनल खोलें और निष्पादित करें:
\ncomposer require cboden/ratchet\nस्थापना के बाद, vendor फ़ोल्डर में ReactPHP सहित सभी निर्भरताएं दिखाई देंगी।
Ratchet पर एक सरल WebSocket सर्वर बनाना
\nएक फ़ाइल server.php बनाएं:
<?php\nrequire 'vendor/autoload.php';\n\nuse Ratchet\\MessageComponentInterface;\nuse Ratchet\\ConnectionInterface;\nuse Ratchet\\Server\\IoServer;\nuse Ratchet\\Http\\HttpServer;\nuse Ratchet\\WebSocket\\WsServer;\n\nclass Chat implements MessageComponentInterface {\n protected $clients;\n\n public function __construct() {\n $this->clients = new \\SplObjectStorage;\n }\n\n public function onOpen(ConnectionInterface $conn) {\n $this->clients->attach($conn);\n echo "नया कनेक्शन: {$conn->resourceId}\\n";\n }\n\n public function onMessage(ConnectionInterface $from, $msg) {\n foreach ($this->clients as $client) {\n if ($from !== $client) {\n $client->send($msg);\n }\n }\n }\n\n public function onClose(ConnectionInterface $conn) {\n $this->clients->detach($conn);\n echo "डिस्कनेक्ट: {$conn->resourceId}\\n";\n }\n\n public function onError(ConnectionInterface $conn, \\Exception $e) {\n echo "त्रुटि: {$e->getMessage()}\\n";\n $conn->close();\n }\n}\n\n$server = IoServer::factory(\n new HttpServer(\n new WsServer(\n new Chat()\n )\n ),\n 8080\n);\n\necho "सर्वर पोर्ट 8080 पर शुरू हुआ\\n";\n$server->run();\n\nकोड की व्याख्या
\n- \n
Chat— वह वर्ग जोMessageComponentInterfaceको लागू करता है।onOpenमें हम कनेक्शन को सहेजते हैं,onMessageमें हम प्रेषक को छोड़कर सभी को संदेश भेजते हैं। \n IoServer::factory— ReactPHP पर आधारित सर्वर बनाता है। हम अपने घटक कोWsServer(WebSocket के लिए) औरHttpServer(HTTP अनुरोधों के साथ संगतता के लिए) में लपेटते हैं। \n - सर्वर पोर्ट 8080 पर सुनता है। इसे कमांड से चलाएं:
php server.php। \n
क्लाइंट भाग (JavaScript)
\nएक HTML फ़ाइल client.html बनाएं:
<!DOCTYPE html>\n<html>\n<head>\n <title>WebSocket चैट</title>\n <script>\n const ws = new WebSocket('ws://localhost:8080');\n\n