PHP में एसिंक्रोनस प्रोग्रामिंग: उदाहरणों के साथ पूर्ण गाइड

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

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

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

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

\n\n

परंपरागत रूप से PHP एक सिंक्रोनस भाषा है: प्रत्येक अनुरोध क्रमिक रूप से निष्पादित होता है, I/O ऑपरेशन पूरा होने तक निष्पादन को ब्लॉक करता है। हालांकि, वेब एप्लिकेशन की प्रदर्शन आवश्यकताओं में वृद्धि के साथ, PHP में एसिंक्रोनस प्रोग्रामिंग एक आवश्यकता बन गई है। यह हजारों समवर्ती कनेक्शनों को संभालने, समानांतर कार्यों को निष्पादित करने और सिस्टम संसाधनों का कुशलतापूर्वक उपयोग करने की अनुमति देता है।

\n\n

इस गाइड में, हम PHP में एसिंक्रोनस प्रोग्रामिंग के व्यावहारिक दृष्टिकोणों पर विचार करेंगे: बुनियादी अवधारणाओं से लेकर आधुनिक लाइब्रेरी और PHP 8.1+ की अंतर्निहित क्षमताओं का उपयोग करके वास्तविक उदाहरणों तक।

\n\n

एसिंक्रोनसिटी की मूल बातें: इवेंट लूप और नॉन-ब्लॉकिंग I/O

\n\n

किसी भी एसिंक्रोनस एप्लिकेशन के केंद्र में इवेंट लूप होता है। यह एक अनंत लूप है जो नई घटनाओं (अनुरोध, डेटाबेस से डेटा, फ़ाइलें) की जाँच करता है और मुख्य थ्रेड को ब्लॉक किए बिना उनकी प्रोसेसिंग वितरित करता है।

\n\n

सिंक्रोनस कोड इस प्रकार काम करता है:

\n
<?php\n// ब्लॉकिंग ऑपरेशन - प्रोग्राम 5 सेकंड प्रतीक्षा करता है\nsleep(5);\necho "5 सेकंड बीत गए\\n";\n// अगला कोड केवल sleep के बाद निष्पादित होगा\necho "यह संदेश 5 सेकंड बाद दिखाई देगा\\n";\n?>
\n\n

ReactPHP का उपयोग करके एसिंक्रोनस दृष्टिकोण:

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse React\\EventLoop\\Factory;\nuse React\\Promise\\Promise;\n\n$loop = Factory::create();\n\n// नॉन-ब्लॉकिंग टाइमर\n$loop->addTimer(5, function () {\n    echo "5 सेकंड बीत गए\\n";\n});\n\necho "यह संदेश तुरंत दिखाई देगा\\n";\n$loop->run();\n?>
\n\n

एसिंक्रोनस वेरिएंट में कोड ब्लॉक नहीं होता: संदेश तुरंत प्रदर्शित होता है, और टाइमर पृष्ठभूमि में सक्रिय होता है।

\n\n

व्यावहारिक गाइड: सरल से जटिल तक

\n\n

1. Fiber का उपयोग (PHP 8.1+)

\n\n

Fiber PHP 8.1 में पेश किया गया एक अंतर्निहित कोरूटीन तंत्र है। यह फ़ंक्शन के निष्पादन को रोकने और थ्रेड को ब्लॉक किए बिना बाद में इसे फिर से शुरू करने की अनुमति देता है।

\n\n

Fiber के साथ समानांतर कार्य निष्पादन का उदाहरण:

\n
<?php\nfunction fetchData(string $url): Fiber\n{\n    return new Fiber(function () use ($url) {\n        // HTTP अनुरोध का अनुकरण\n        $ch = curl_init($url);\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n        curl_setopt($ch, CURLOPT_TIMEOUT, 5);\n        \n        // Fiber को रोकें\n        Fiber::suspend(curl_exec($ch));\n        curl_close($ch);\n    });\n}\n\n// कई Fiber बनाएं\n$fiber1 = fetchData('https://api.example.com/data1');\n$fiber2 = fetchData('https://api.example.com/data2');\n\n// Fiber शुरू करें\n$result1 = $fiber1->start();\n$result2 = $fiber2->start();\n\n// निष्पादन फिर से शुरू करें\n$result1 = $fiber1->resume();\n$result2 = $fiber2->resume();\n\necho "परिणाम 1: " . $result1 . "\\n";\necho "परिणाम 2: " . $result2 . "\\n";\n?>
\n\n

2. Amp के माध्यम से डेटाबेस के साथ एसिंक्रोनस कार्य

\n\n

Amp एसिंक्रोनस प्रोग्रामिंग के लिए एक शक्तिशाली लाइब्रेरी है। MySQL से एसिंक्रोनस कनेक्शन का उदाहरण देखें:

\n\n
<?php\nrequire 'vendor/autoload.php';\n\nuse Amp\\Loop;\nuse Amp\\Mysql\\ConnectionConfig;\nuse Amp\\Mysql\\Pool;\n\nLoop::run(function () {\n    $config = ConnectionConfig::fromString(\n        "host=localhost user=root password=secret db=test"\n    );\n    \n    $pool = new Pool($config);\n    \n    // एसिंक्रोनस क्वेरी - निष्पादन को ब्लॉक नहीं करता\n    $promise1 = $pool->query("SELECT SLEEP(2)");\n    $promise2 = $pool->query("SELECT 1 + 1 AS result");\n    \n    // दोनों क्वेरी समानांतर रूप से निष्पादित होती हैं\n    $result1 = yield $promise1;\n    $result2 = yield $promise2;\n    \n    foreach ($result2 as $row) {\n        echo "परिणाम: " . $row['result'] . "\\n";\n    }\n    \n    $pool->close();\n});\n?>
\n\n

3. ReactPHP पर एसिंक्रोनस HTTP सर्वर बनाना

\n\n

पूर्ण

ब्लॉग

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