जब आपका PHP कोड सिर्फ एक स्क्रिप्ट नहीं रह जाता
\n\nक्या आपने कभी PHP में एक स्क्रिप्ट चलाई है जो हज़ारों ईमेल प्रोसेस करती हो, और उसे पूरा होने में एक मिनट का इंतज़ार करना पड़ा हो? या फिर 'बेयर' PHP पर चैट बनाने की कोशिश की हो और पाया हो कि बिना पेज रिफ्रेश किए यह संभव नहीं है? अगर हाँ, तो आप पारंपरिक सिंक्रोनस दृष्टिकोण की सीमाओं से पहले ही रूबरू हो चुके हैं।
\n\nPHP में Event-Driven आर्किटेक्चर सिर्फ Node.js की दुनिया का एक फैशनेबल शब्द नहीं है। यह आपके कोड को तेज़, अधिक उत्तरदायी और स्केलेबल बनाने का एक वास्तविक तरीका है। इस लेख में, हम समझेंगे कि PHP में इवेंट-ड्रिवन प्रोग्रामिंग कैसे काम करती है, कुछ लाइव उदाहरण लिखेंगे, और जानेंगे कि इसकी वास्तव में कब ज़रूरत होती है।
\n\nEvent-Driven आर्किटेक्चर सरल शब्दों में क्या है?
\n\nएक ऑफिस की कल्पना करें जहाँ हर कर्मचारी सख्त निर्देशों के अनुसार काम करता है: 'पहले A करो, फिर B, फिर C'। यह सिंक्रोनस कोड है। अब एक ऐसे ऑफिस की कल्पना करें जहाँ कर्मचारी घटनाओं पर प्रतिक्रिया करते हैं: 'जब ईमेल आए - उसका जवाब दो', 'जब ऑर्डर कंफर्म हो - नोटिफिकेशन भेजो'। यही इवेंट-ड्रिवन आर्किटेक्चर है।
\n\nPHP में Event-Driven आर्किटेक्चर में प्रोग्राम लीनियर तरीके से नहीं चलता। इसके बजाय, वह घटनाओं (क्लिक, रिक्वेस्ट, टाइमर, टास्क पूरा होना) का इंतज़ार करता है और उन पर प्रतिक्रिया करता है। यहाँ मुख्य घटक है event loop (इवेंट लूप), जो लगातार जाँचता है कि कुछ हुआ है या नहीं, और संबंधित हैंडलर को चलाता है।
\n\nPHP डेवलपर्स को इस पर ध्यान क्यों देना चाहिए?
\n\nलंबे समय तक, PHP केवल सिंक्रोनस एक्ज़ीक्यूशन से जुड़ा था: रिक्वेस्ट आई - स्क्रिप्ट चली - रिस्पॉन्स दिया। लेकिन ReactPHP और Amp जैसी लाइब्रेरीज़ के आने से सब कुछ बदल गया। अब आप यह कर सकते हैं:
\n\n- \n
- एक साथ हज़ारों WebSocket कनेक्शन को हैंडल करना \n
- RabbitMQ जैसी कतारों के बिना बैकग्राउंड टास्क चलाना \n
- शुद्ध PHP पर वास्तविक माइक्रोसर्विसेज़ बनाना \n
- एसिंक्रोनस HTTP क्लाइंट और सर्वर लिखना \n
और यह सब - भाषा बदले बिना और पूरे कोडबेस को फिर से लिखे बिना।
\n\nEvent-Driven आर्किटेक्चर के मुख्य घटक
\n\nकोड लिखने से पहले, आइए मुख्य अवधारणाओं को समझें। किसी भी PHP में इवेंट-ड्रिवन सिस्टम में तीन मुख्य तत्व होते हैं:
\n\n- \n
- Event loop - एक अनंत लूप जो घटनाओं (टाइमर, सॉकेट, सिग्नल) को सुनता है और उन्हें हैंडलर को भेजता है। \n
- Emitter/Dispatcher - एक ऑब्जेक्ट जो घटनाओं को जनरेट और भेजता है। \n
- Listener/Handler - एक फंक्शन या मेथड जो किसी विशिष्ट घटना पर प्रतिक्रिया करता है। \n
क्लासिक PHP में, आप लिखेंगे: file_get_contents('https://api.example.com') - और जवाब का इंतज़ार करेंगे। Event-driven दृष्टिकोण में, आप 'डेटा प्राप्त हुआ' घटना की सदस्यता लेते हैं और दूसरा कोड चलाते रहते हैं।
उदाहरण 1: शुद्ध PHP पर सरल Event Dispatcher
\n\nआइए बिना किसी बाहरी लाइब्रेरी के एक बेसिक इवेंट डिस्पैचर बनाएं। इससे PHP में इवेंट-ड्रिवन प्रोग्रामिंग का सार समझने में मदद मिलेगी।
\n\n<?php\n\nclass EventDispatcher {\n private array $listeners = [];\n\n public function addListener(string $eventName, callable $listener): void {\n $this->listeners[$eventName][] = $listener;\n }\n\n public function dispatch(string $eventName, mixed $data = null): void {\n if (!isset($this->listeners[$eventName])) {\n return;\n }\n foreach ($this->listeners[$eventName] as $listener) {\n call_user_func($listener, $data);\n }\n }\n}\n\n// उपयोग\n$dispatcher = new EventDispatcher();\n\n$dispatcher->addListener('user.registered', function ($userData) {\n echo "{$userData['email']} के लिए स्वागत ईमेल भेज रहे हैं\\n";\n});\n\n$dispatcher->addListener('user.registered', function ($userData) {\n echo "उपयोगकर्ता {$userDa