PHP में एसिंक्रोनस प्रोग्रामिंग का परिचय
परंपरागत रूप से PHP सिंक्रोनस मोड में काम करता है: प्रत्येक अनुरोध क्रमिक रूप से, पंक्ति दर पंक्ति निष्पादित होता है। हालाँकि, आधुनिक वेब डेवलपमेंट में अक्सर एक साथ कई कार्यों को संभालने की आवश्यकता होती है - ईमेल भेजने से लेकर WebSocket और API के साथ काम करने तक। PHP में एसिंक्रोनस प्रोग्रामिंग मुख्य निष्पादन थ्रेड को ब्लॉक किए बिना इन कार्यों को कुशलतापूर्वक हल करने की अनुमति देता है।
इस गाइड में, हम समझेंगे कि एसिंक्रोनसिटी क्या है, इसकी आवश्यकता क्यों है, और PHP में इसका उपयोग कैसे शुरू करें। आप प्रमुख टूल के बारे में जानेंगे: Fiber, ReactPHP, Swoole और कोरूटीन के साथ काम करने के लिए अंतर्निहित फ़ंक्शन।
एसिंक्रोनस प्रोग्रामिंग क्या है और इसकी आवश्यकता क्यों है?
सिंक्रोनस बनाम एसिंक्रोनस कोड
कल्पना करें कि आप पिज़्ज़ा ऑर्डर कर रहे हैं। सिंक्रोनस दृष्टिकोण: आप फोन करते हैं, इसके बनने तक प्रतीक्षा करते हैं, और उसके बाद ही फोन रखते हैं। एसिंक्रोनस: आप फोन करते हैं, ऑर्डर देते हैं, और जब तक पिज़्ज़ा बन रहा है - आप अपने काम करते रहते हैं। PHP में यह इस तरह दिखता है:
// सिंक्रोनस कोड (ब्लॉकिंग)$data = file_get_contents('https://api.example.com');echo "डेटा प्राप्त हुआ: " . $data; // लोड होने तक प्रतीक्षा करें
// एसिंक्रोनस कोड (नॉन-ब्लॉकिंग)$promise = async_file_get_contents('https://api.example.com');echo "अनुरोध भेज दिया गया, अन्य काम कर सकते हैं...";$data = await($promise); // बाद में परिणाम प्राप्त करेंसिंक्रोनस PHP की समस्याएँ
- I/O ब्लॉकिंग: फ़ाइलों, DB या नेटवर्क अनुरोधों के साथ संचालन स्क्रिप्ट के निष्पादन को रोक देते हैं
- कम प्रदर्शन: प्रत्येक नए अनुरोध के लिए एक अलग प्रक्रिया या थ्रेड की आवश्यकता होती है
- रियल-टाइम समस्याएँ: चैट, सूचनाएँ और स्ट्रीमिंग अकुशल रूप से काम करते हैं
एसिंक्रोनस दृष्टिकोण के लाभ
- सैकड़ों और हजारों कनेक्शनों का एक साथ प्रसंस्करण
- मेमोरी और सर्वर संसाधनों की बचत
- रियल-टाइम एप्लिकेशन बनाने की क्षमता
- अधिक प्रतिक्रियाशील इंटरफ़ेस
एसिंक्रोनस PHP के मुख्य उपकरण
1. कोरूटीन और Fiber (PHP 8.1+)
PHP 8.1 से शुरू करके, Fiber के लिए अंतर्निहित समर्थन आया - हल्के कोरूटीन। Fiber फ़ंक्शन के निष्पादन को रोकने और बाद में इसे फिर से शुरू करने की अनुमति देता है, बिना मुख्य थ्रेड को ब्लॉक किए।
<?php$fiber = new Fiber(function(): void { $value = Fiber::suspend('first'); echo "मान के साथ फिर से शुरू: $value";});
$value = $fiber->start();echo "प्रारंभिक मान: $value"; // first$fiber->resume('second'); // मान के साथ फिर से शुरू: second?>2. ReactPHP — PHP के लिए Event Loop
ReactPHP एक लाइब्रेरी है जो इवेंट-ओरिएंटेड प्रोग्रामिंग (event loop) को लागू करती है। यह नॉन-ब्लॉकिंग इनपुट-आउटपुट संचालन करने की अनुमति देता है।
<?phprequire 'vendor/autoload.php';
$loop = React\\EventLoop\\Loop::get();
$loop->addTimer(1.0, function () { echo "1 सेकंड बीत गया";});
$loop->addTimer(2.0, function () { echo "2 सेकंड बीत गए";});
echo "शुरू...";$loop->run();?>ReactPHP एसिंक्रोनस HTTP क्लाइंट और सर्वर भी प्रदान करता है:
<?php$browser = new React\\Http\\Browser($loop);
$browser->get('https://api.example.com')->then( function (Psr\\Http\\Message\\ResponseInterface $response) { echo "उत्तर: " . $response->getBody(); }, function (Exception $e) { echo "त्रुटि: " . $e->getMessage(); });?>3. Swoole — उच्च-प्रदर्शन एसिंक्रोनस सर्वर
Swoole PHP के लिए एक एक्सटेंशन है जो इसे एक पूर्ण एसिंक्रोनस सर्वर में बदल देता है। यह कोरूटीन, WebSocket, TCP/UDP सर्वर और बहुत कुछ का समर्थन करता है।
<?ph