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\nReactPHP का उपयोग करके एसिंक्रोनस दृष्टिकोण:
\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\n1. Fiber का उपयोग (PHP 8.1+)
\n\nFiber PHP 8.1 में पेश किया गया एक अंतर्निहित कोरूटीन तंत्र है। यह फ़ंक्शन के निष्पादन को रोकने और थ्रेड को ब्लॉक किए बिना बाद में इसे फिर से शुरू करने की अनुमति देता है।
\n\nFiber के साथ समानांतर कार्य निष्पादन का उदाहरण:
\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\n2. Amp के माध्यम से डेटाबेस के साथ एसिंक्रोनस कार्य
\n\nAmp एसिंक्रोनस प्रोग्रामिंग के लिए एक शक्तिशाली लाइब्रेरी है। 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\n3. ReactPHP पर एसिंक्रोनस HTTP सर्वर बनाना
\n\nपूर्ण