PHP पर WebSocket: उन्नत स्तर के real-time अनुप्रयोग बनाना

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

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

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

PHP पर WebSocket: सिद्धांत से production-समाधान तक

\n\n

WebSocket प्रोटोकॉल ने वेब डेवलपमेंट में क्रांति ला दी है, जिससे एकल TCP कनेक्शन पर काम करने वाले पूर्ण real-time अनुप्रयोग बनाना संभव हो गया है। क्लासिक HTTP के विपरीत, जहां क्लाइंट लगातार अनुरोध शुरू करता है, WebSocket दो-तरफा संचार चैनल स्थापित करता है, जिसके माध्यम से सर्वर किसी भी समय डेटा भेज सकता है। यह चैट, ट्रेडिंग प्लेटफॉर्म, ऑनलाइन गेम और मॉनिटरिंग सिस्टम के लिए महत्वपूर्ण है।

\n\n

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

\n\n

PHP पर WebSocket सर्वर की आर्किटेक्चर

\n\n

सही टेक्नोलॉजी स्टैक का चयन

\n\n

Production-समाधानों के लिए, socket_create के माध्यम से काम करने वाली सरल लाइब्रेरी उपयुक्त नहीं हैं। Event-driven दृष्टिकोण आवश्यक है। अनुशंसित स्टैक:

\n\n
    \n
  • ReactPHP — अतुल्यकालिक इनपुट/आउटपुट के लिए event-loop
  • \n
  • Ratchet — ReactPHP के ऊपर WebSocket घटक
  • \n
  • Redis — अंतर-प्रक्रिया संचार के लिए pub/sub
  • \n
  • Supervisor — अपटाइम सुनिश्चित करने के लिए प्रक्रिया प्रबंधक
  • \n
\n\n

Ratchet के साथ बेसिक सर्वर

\n\n

हजारों कनेक्शनों को संभालने में सक्षम पूर्ण WebSocket सर्वर बनाने पर विचार करें:

\n\n
use Ratchet\\MessageComponentInterface;\nuse Ratchet\\ConnectionInterface;\nuse React\\EventLoop\\Factory;\nuse React\\Socket\\Server;\nuse Ratchet\\Server\\IoServer;\nuse Ratchet\\Http\\HttpServer;\nuse Ratchet\\WebSocket\\WsServer;\n\nclass ChatServer implements MessageComponentInterface {\n    protected $clients;\n    protected $redis;\n\n    public function __construct() {\n        $this->clients = new \\SplObjectStorage;\n        $this->redis = new \\Predis\\Client([\n            'scheme' => 'tcp',\n            'host'   => '127.0.0.1',\n            'port'   => 6379,\n        ]);\n        // अंतर-सर्वर सिंक्रोनाइज़ेशन के लिए Redis चैनल की सदस्यता\n        $this->redis->subscribe(['chat_messages'], function($redis, $channel, $message) {\n            $this->broadcast(json_decode($message, true));\n        });\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        $data = json_decode($msg, true);\n        \n        // संदेश का सत्यापन\n        if ($this->validateMessage($data)) {\n            // अन्य सर्वरों के लिए Redis में प्रकाशन\n            $this->redis->publish('chat_messages', json_encode($data));\n            // स्थानीय क्लाइंट को भेजना\n            $this->broadcast($data, $from);\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    protected function broadcast(array $data, ?ConnectionInterface $exclude = null) {\n        foreach ($this->clients as $client) {\n            if ($exclude === null || $client !== $exclude) {\n                $client->send(json_encode($data));\n            }\n        }\n    }\n\n    protected function validateMessage(array $data): bool {\n        return isset($data['type'], $data['payload']) && \n               in_array($data['type'], ['message', 'typing', 'status']);\n    }\n}\n\n// सर्वर शुरू करना\n$loop = Factory::create();\n$webSock = new Server('0.0.0.0:8080', $loop);\n$webServer = n                

ब्लॉग

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