PHP में एसिंक्रोनस प्रोग्रामिंग: शुरुआती लोगों के लिए पूर्ण गाइड

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

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

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

PHP में एसिंक्रोनस प्रोग्रामिंग का परिचय

\n\n

पारंपरिक PHP सिंक्रोनस रूप से काम करता है: प्रत्येक ऑपरेशन क्रमिक रूप से निष्पादित होता है। यदि स्क्रिप्ट को HTTP अनुरोध भेजने या फ़ाइल पढ़ने की आवश्यकता होती है, तो वह ऑपरेशन पूरा होने की प्रतीक्षा करता है, जिससे पूरे कोड का निष्पादन अवरुद्ध हो जाता है। उच्च लोड वाले वेब एप्लिकेशन के लिए, यह एक बाधा बन जाता है। एसिंक्रोनस प्रोग्रामिंग इस समस्या को हल करता है, जिससे मुख्य थ्रेड को अवरुद्ध किए बिना एक साथ कई कार्यों को निष्पादित किया जा सकता है।

\n\n

इस गाइड में, हम समझेंगे कि PHP में एसिंक्रोनसिटी कैसे काम करती है, कौन से उपकरण उपलब्ध हैं और व्यवहार में उनका उपयोग कैसे करें। आप जनरेटर, ReactPHP और Swoole लाइब्रेरी, साथ ही PHP 8.1 की नई सुविधा — Fiber के बारे में जानेंगे।

\n\n

एसिंक्रोनस प्रोग्रामिंग की मूल बातें

\n\n

एसिंक्रोनसिटी क्या है और इसकी आवश्यकता क्यों है?

\n\n

कल्पना करें कि आप नाश्ता बना रहे हैं। सिंक्रोनस दृष्टिकोण: आप केतली चढ़ाते हैं, उसके उबलने का इंतज़ार करते हैं, फिर अंडे तलना शुरू करते हैं। एसिंक्रोनस दृष्टिकोण: आप केतली चढ़ाते हैं और जब तक पानी गर्म हो रहा है, समानांतर में आमलेट बनाते हैं। PHP में, इसका मतलब है कि डेटाबेस या बाहरी API से प्रतिक्रिया की प्रतीक्षा करने के बजाय, आप दूसरा कोड निष्पादित कर सकते हैं।

\n\n

एसिंक्रोनस दृष्टिकोण के मुख्य लाभ:

\n
    \n
  • I/O ऑपरेशन (नेटवर्क, डिस्क, डेटाबेस) में प्रदर्शन में वृद्धि
  • \n
  • सर्वर संसाधनों की बचत — कम थ्रेड अधिक अनुरोधों को संभालते हैं
  • \n
  • रीयल-टाइम एप्लिकेशन (चैट, सूचनाएं, स्ट्रीमिंग) बनाने की संभावना
  • \n
\n\n

सिंक्रोनस कोड की समस्या

\n\n

एक क्लासिक उदाहरण पर विचार करें: दो दूरस्थ API से डेटा प्राप्त करना। सिंक्रोनस कोड क्रमिक रूप से निष्पादित होगा:

\n\n
<?php\nfunction fetchData($url) {\n    $ch = curl_init($url);\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n    $result = curl_exec($ch); // अनुरोध के दौरान अवरोधन\n    curl_close($ch);\n    return $result;\n}\n\n$start = microtime(true);\n$data1 = fetchData('https://api.example.com/users');\n$data2 = fetchData('https://api.example.com/posts');\necho "समय: " . (microtime(true) - $start);\n?>
\n\n

यदि प्रत्येक अनुरोध में 2 सेकंड लगते हैं, तो कुल निष्पादन समय 4 सेकंड होगा, जबकि हम अनुरोधों को समानांतर रूप से निष्पादित कर सकते थे।

\n\n

PHP में एसिंक्रोनसिटी के लिए उपकरण

\n\n

1. जनरेटर (yield) — हल्की एसिंक्रोनसिटी

\n\n

जनरेटर PHP 5.5 में दिखाई दिए और ऐसे फंक्शन बनाने की अनुमति देते हैं जो अपने निष्पादन को रोक सकते हैं और कॉल करने वाले कोड को नियंत्रण वापस कर सकते हैं। यह कोरूटीन बनाने का आधार है।

\n\n
<?php\nfunction generator() {\n    echo "जनरेटर की शुरुआत\\n";\n    yield 1;\n    echo "पहले yield के बाद\\n";\n    yield 2;\n    echo "अंत\\n";\n}\n\n$gen = generator();\nforeach ($gen as $value) {\n    echo "प्राप्त: $value\\n";\n}\n?>
\n\n

जनरेटर का उपयोग इवेंट लूप के साथ मिलकर नॉन-ब्लॉकिंग ऑपरेशन को व्यवस्थित करने के लिए किया जा सकता है। हालांकि, पूर्ण एसिंक्रोनसिटी के लिए यह पर्याप्त नहीं है — एक लाइब्रेरी की आवश्यकता है।

\n\n

2. ReactPHP — इवेंट-ओरिएंटेड लाइब्रेरी

\n\n

ReactPHP एसिंक्रोनस प्रोग्रामिंग के लिए एक लोकप्रिय लाइब्रेरी है। यह एक इवेंट लूप, नॉन-ब्लॉकिंग सॉकेट, HTTP क्लाइंट और सर्वर प्रदान करता है। Composer के माध्यम से इंस्टॉलेशन:

\n\n
composer require react/event-loop react/http
\n\n

एसिंक्रोनस HTTP अनुरोध का उदाहरण:

\n\n
<?php\nrequire 'vendor/autoload.php';\n\nuse React\\EventLoop\\Factory;\nuse React\\HttpClient\\Client;\nuse React\\HttpClient\\Response;\n\n$loop = Factory::create();\n$client = new Client($loop);\n\n$request = $client->request('GET', 'https://api.example.com/data');\n$request->on('response', function (Response $response) {\n    $response->on('data', function ($chunk) {\n        echo "खंड प्राप्त: " . strlen($chunk) . " बाइट\\n";\n    });\n    $response->on('end', function () {\n        echo "अनुरोध पूर्ण\\n";\n    });\n});\n$request->end();\n\necho "अनुरोध भेजा गया, प्रतीक्षा कर रहे हैं...\\n";\n$loop->run();\n?                

ब्लॉग

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