PHP में एसिंक्रोनस प्रोग्रामिंग का परिचय
परंपरागत रूप से PHP को एक सिंक्रोनस भाषा माना जाता है: प्रत्येक अनुरोध क्रमिक रूप से निष्पादित होता है, ऑपरेशन (जैसे, डेटाबेस या API से अनुरोध) पूरा होने तक निष्पादन को अवरुद्ध करता है। हालाँकि, वेब एप्लिकेशन के प्रदर्शन की बढ़ती माँगों के साथ, PHP में एसिंक्रोनस प्रोग्रामिंग अधिक से अधिक लोकप्रिय हो रही है। एसिंक्रोनस कोड आपको प्रत्येक कार्य के पूरा होने की प्रतीक्षा किए बिना एक साथ कई कार्य करने की अनुमति देता है, जो अनुरोध प्रसंस्करण को काफी तेज करता है और सर्वर लोड को कम करता है।
इस गाइड में, हम PHP में एसिंक्रोनस प्रोग्रामिंग की मूल अवधारणाओं को समझेंगे, लोकप्रिय लाइब्रेरीज़ (ReactPHP, Amp) के साथ-साथ भाषा की आधुनिक क्षमताओं — Fiber और जनरेटर पर चर्चा करेंगे।
एसिंक्रोनसिटी के मूल सिद्धांत: Event Loop और नॉन-ब्लॉकिंग I/O
किसी भी एसिंक्रोनस दृष्टिकोण के केंद्र में Event Loop (ईवेंट लूप) होता है। यह एक अनंत लूप है जो जाँचता है कि कोई घटना घटी है या नहीं (जैसे, HTTP अनुरोध पूरा हुआ या फ़ाइल पढ़ना समाप्त हुआ)। यदि कोई घटना घटती है, तो संबंधित हैंडलर निष्पादित होता है। इस दौरान मुख्य थ्रेड ब्लॉक नहीं होता — यह किसी अन्य कार्य पर स्विच कर सकता है।
नॉन-ब्लॉकिंग I/O (Non-blocking I/O) एक प्रमुख सिद्धांत है। सिंक्रोनस कोड में, file_get_contents() का कॉल फ़ाइल के पूरी तरह लोड होने तक स्क्रिप्ट के निष्पादन को ब्लॉक करता है। एसिंक्रोनस मोड में, आप ऑपरेशन शुरू करते हैं और अन्य कोड निष्पादित करना जारी रखते हैं, और परिणाम callback या Promise के माध्यम से आता है।
उदाहरण: सिंक्रोनस बनाम एसिंक्रोनस अनुरोध
// सिंक्रोनस कोड (ब्लॉकिंग)$start = microtime(true);$data1 = file_get_contents('http://example.com/api1');$data2 = file_get_contents('http://example.com/api2');echo "निष्पादन समय: " . (microtime(true) - $start) . " सेकंड"; // ~2 सेकंड (यदि प्रत्येक अनुरोध 1 सेकंड का है)
// एसिंक्रोनस कोड (ReactPHP)$loop = React\\EventLoop\\Factory::create();$client = new React\\Http\\Browser($loop);
$promise1 = $client->get('http://example.com/api1');$promise2 = $client->get('http://example.com/api2');
$promise1->then(function ($response) { echo "प्रतिक्रिया 1 प्राप्त हुई";});$promise2->then(function ($response) { echo "प्रतिक्रिया 2 प्राप्त हुई";});
$loop->run();// निष्पादन समय ~1 सेकंड (अनुरोध समानांतर रूप से निष्पादित होते हैं)PHP में एसिंक्रोनस प्रोग्रामिंग के लिए लाइब्रेरीज़
आज, दो सबसे लोकप्रिय लाइब्रेरीज़ ReactPHP और Amp हैं। दोनों Event Loop, Promise, साथ ही HTTP, सॉकेट और फ़ाइल सिस्टम के साथ काम करने के लिए तैयार घटक प्रदान करती हैं।
ReactPHP
ReactPHP एक परिपक्व लाइब्रेरी है जो 2012 से अस्तित्व में है। यह ईवेंट लूप तक निम्न-स्तरीय पहुँच और कई घटक प्रदान करती है: react/socket, react/http, react/dns और अन्य।
// ReactPHP पर HTTP सर्वर का उदाहरण$loop = React\\EventLoop\\Factory::create();$server = new React\\Http\\Server($loop, function (Psr\\Http\\Message\\ServerRequestInterface $request) { return new React\\Http\\Message\\Response( 200, ['Content-Type' => 'text/plain'], "Hello, Async World!" );});$socket = new React\\Socket\\Server('127.0.0.1:8080', $loop);$server->listen($socket);echo "सर्वर http://127.0.0.1:8080 पर शुरू हुआ";$loop->run();Amp
Amp कोरूटीन (generator-based coroutines) का उपयोग करता है और एक उच्च-स्तरीय API प्रदान करता है। then() की श्रृंखलाओं के बजाय, आप yield और await का उपयोग करते हैं, जो कोड को सिंक्रोनस जैसा बनाता है।
// Amp के साथ उदाहरण\\Amp\\Loop::run(function () { $response = yield \\Amp\\Http\\Client\\HttpClient::request('http://example.com'); $body = yield $response->getBody()->buffer(); echo $body;});Fiber: PHP 8.1 के कोर में एसिंक्रोनसिटी
PHP 8.1 से शुरू करके, भाषा में
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें
PHP ऐरे में किसी भी स्थान पर तत्व सम्मिलित करना: हुड के नीचे का जादू
jQuery के साथ input को कैसे निष्क्रिय और सक्रिय करें: पूर्ण गाइड
जावास्क्रिप्ट में टास्क कतारें: अपनी वेबसाइट को तेज़ और स्मार्ट बनाएं
C# में रिफ्लेक्शन और इंट्रोस्पेक्शन: अपने कोड के अंदर कैसे झाँकें
Rust में कार्यात्मक प्रोग्रामिंग: दृष्टिकोण और उदाहरण