वेब-सॉकेट्स PHP में: साइट को रियल टाइम में कैसे बोलने दें
\n\nएक सामान्य वेबसाइट की कल्पना करें। आपने एक बटन दबाया — और पेज रिफ्रेश होने का इंतज़ार करते हैं। यह डाक से पत्र भेजने जैसा है: बक्से में डाला और उम्मीद की कि पहुँच जाएगा। अब कल्पना करें कि आप फोन पर बात कर रहे हैं — तुरंत दूसरे व्यक्ति को सुनते हैं। WebSockets — यह वेब के लिए बिल्कुल ऐसा ही "फोन" है। और हाँ, PHP पर यह काम करता है।
\n\nबहुत से लोग मानते हैं कि WebSocket केवल Node.js या Python का क्षेत्र है। लेकिन PHP, भले ही HTML को "जोड़ने" के लिए बनाया गया था, लंबे समय से अपने पालने से बाहर निकल चुका है। आज हम देखेंगे कि PHP पर रियल-टाइम एप्लिकेशन कैसे बनाया जाए — चाहे वह चैट हो, नोटिफिकेशन फीड हो या लाइव एनालिटिक्स। और कोई टेढ़ा-मेढ़ा समाधान नहीं।
\n\nअगर आपने कभी long polling के ज़रिए PHP पर लाइव चैट बनाने की कोशिश की है और देखा है कि सर्वर 1000 रिक्वेस्ट प्रति सेकंड पर कैसे गिर जाता है — यह लेख आपके लिए है। WebSockets खेल के नियम बदल देते हैं।
\n\nWebSocket क्या है और PHP इसके साथ क्यों दोस्ती करता है?
\n\nWebSocket ब्राउज़र और सर्वर के बीच एक दो-तरफा संचार चैनल है। HTTP के विपरीत, जहाँ क्लाइंट हमेशा अनुरोध शुरू करता है, यहाँ सर्वर स्वयं क्लाइंट को डेटा भेज सकता है। यह वास्तविक रियल टाइम देता है, न कि उसकी नकल।
\n\nlong polling (जहाँ क्लाइंट लगातार पूछता है "क्या कोई खबर है?") से मुख्य अंतर यह है कि WebSocket में कनेक्शन खुला रहता है। एक बार स्थापित किया — और बिना रुके बात करें। ट्रैफिक और संसाधनों की भारी बचत होती है।
\n\nPHP, एक भाषा के रूप में, स्क्रिप्ट को क्रमिक रूप से निष्पादित करता है। लेकिन यह WebSocket के लिए एक उत्कृष्ट सर्वर होने में बाधा नहीं डालता। रहस्य आर्किटेक्चर में है: हम प्रत्येक कनेक्शन के लिए PHP को वेब सर्वर (Apache/Nginx) के माध्यम से नहीं चलाते, बल्कि इसे एक स्वतंत्र डेमॉन के रूप में उपयोग करते हैं। और यहाँ लाइब्रेरीज़ मंच पर आती हैं।
\n\nPHP पर WebSocket के लिए लाइब्रेरीज़: क्या चुनें?
\n\nदो सबसे लोकप्रिय लाइब्रेरीज़ हैं — और दोनों ध्यान देने योग्य हैं:
\n\n- \n
- Ratchet — PHP WebSocket का दादा। विश्वसनीय, सिद्ध, लेकिन थोड़ा "पुराने ज़माने का"।
ReactPHPपर आधारित इवेंट-आधारित मॉडल का उपयोग करता है। सरल चैट और नोटिफिकेशन के लिए बढ़िया है। \n - Swoole — एक जानवर। यह सिर्फ एक लाइब्रेरी नहीं है, बल्कि एक पूरा इंजन है जो PHP के कोर को फिर से लिखता है। एसिंक्रोनसिटी, कोरूटीन और Go के करीब प्रदर्शन देता है। लेकिन सर्वर पर एक्सटेंशन इंस्टॉल करने की आवश्यकता है। \n
पहली बार सीखने के लिए मैं Ratchet की सलाह देता हूँ — यह सीखने में आसान है और php.ini में बदलाव की आवश्यकता नहीं है। साथ ही, यह ReactPHP के साथ बहुत अच्छा काम करता है, जिसे हम आज छूएँगे।
\n\nRatchet के साथ PHP पर एक सरल WebSocket सर्वर लिखें
\n\nचलिए एक बेसिक इको सर्वर बनाते हैं। यह क्लाइंट से संदेश प्राप्त करेगा और उन्हें वापस भेजेगा। यह WebSocket के लिए क्लासिक "Hello, World" है।
\n\nपहले Composer के माध्यम से Ratchet इंस्टॉल करें। प्रोजेक्ट की रूट डायरेक्टरी में टर्मिनल खोलें:
\n\ncomposer require cboden/ratchet\n\nअब server.php फ़ाइल बनाएँ:
<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Ratchet\\MessageComponentInterface;\nuse Ratchet\\ConnectionInterface;\n\nclass EchoServer implements MessageComponentInterface {\n public function onOpen(ConnectionInterface $conn) {\n echo "नया कनेक्शन: {$conn->resourceId}\\n";\n }\n\n public function onMessage(ConnectionInterface $from, $msg) {\n echo "प्राप्त हुआ: {$msg}\\n";\n $from->send("इको: {$msg}");\n }\n\n public function onClose(ConnectionInterface $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// सर्वर शुरू करें\nuse Ratchet\\Server\\IoServer;\nuse Ratchet\\Http\\HttpServer;\nuse Ratchet\\WebSocket\\WsServer;\n\