RxPHP के साथ PHP में रिएक्टिव प्रोग्रामिंग
रिएक्टिव प्रोग्रामिंग एक ऐसी पैराडाइम है जो डेटा के एसिंक्रोनस फ्लो और बदलावों के प्रसार पर केंद्रित है। PHP में यह पैराडाइम RxPHP (ReactiveX for PHP) लाइब्रेरी के ज़रिए लागू की जाती है, जो इवेंट्स, एसिंक्रोनस रिक्वेस्ट और डेटा सीक्वेंस को Observable स्ट्रीम के रूप में हैंडल करने की सुविधा देती है।
RxPHP क्या है?
RxPHP लोकप्रिय ReactiveX (Rx) फ्रेमवर्क का PHP-पोर्टेड वर्जन है। यह Observable सीक्वेंस और LINQ-जैसे क्वेरी ऑपरेटर्स की मदद से एसिंक्रोनस और इवेंट-ड्रिवन प्रोग्राम बनाने के टूल्स प्रदान करता है।
RxPHP की मुख्य अवधारणाएँ:
- Observable — डेटा का स्रोत, जो वैल्यू, एरर या कम्पलीशन सिग्नल एमिट कर सकता है।
- Observer — सब्सक्राइबर, जो Observable से आने वाले इवेंट्स पर रिएक्ट करता है।
- Subscription — Observable और Observer के बीच का कनेक्शन, जिससे अनसब्सक्राइब किया जा सकता है।
- Operators — स्ट्रीम को ट्रांसफॉर्म, फ़िल्टर और कम्बाइन करने के फंक्शन (map, filter, merge, zip आदि)।
- Scheduler — एक्ज़ीक्यूशन को मैनेज करता है (सिंक्रोनस, एसिंक्रोनस, डिले के साथ)।
RxPHP इंस्टॉल करना
Composer के ज़रिए इंस्टॉल करें:
composer require reactivex/rxphp
उदाहरण 1: एक सरल Observable बनाना
एक ऐसा स्ट्रीम बनाएँ जो तीन नंबर एमिट करे और फिर खत्म हो जाए:
<?php
require 'vendor/autoload.php';
use Rx\Observable;
$observable = Observable::fromArray([10, 20, 30]);
$disposable = $observable->subscribe(
function ($value) {
echo "प्राप्त हुआ: $value\n";
},
function (\Throwable $error) {
echo "एरर: " . $error->getMessage() . "\n";
},
function () {
echo "पूरा हुआ!\n";
}
);
आउटपुट:
प्राप्त हुआ: 10
प्राप्त हुआ: 20
प्राप्त हुआ: 30
पूरा हुआ!
उदाहरण 2: map और filter ऑपरेटर्स का उपयोग
नंबरों की स्ट्रीम को ट्रांसफॉर्म करें: सम संख्याओं को फ़िल्टर करें और उन्हें 10 से गुणा करें:
<?php
use Rx\Observable;
$observable = Observable::fromArray([1, 2, 3, 4, 5])
->filter(function ($value) {
return $value % 2 === 0;
})
->map(function ($value) {
return $value * 10;
});
$observable->subscribe(function ($value) {
echo "परिणाम: $value\n";
});
आउटपुट:
परिणाम: 20
परिणाम: 40
उदाहरण 3: HttpClient के साथ एसिंक्रोनस काम
RxPHP एसिंक्रोनस HTTP रिक्वेस्ट के लिए बहुत उपयुक्त है। GuzzleHttp लाइब्रेरी के साथ Observable::fromPromise का उपयोग करें:
<?php
use Rx\Observable;
use GuzzleHttp\Client;
use GuzzleHttp\Promise;
$client = new Client();
$promise1 = $client->getAsync('https://api.example.com/data1');
$promise2 = $client->getAsync('https://api.example.com/data2');
Observable::fromArray([$promise1, $promise2])
->flatMap(function ($promise) {
return Observable::fromPromise($promise);
})
->map(function ($response) {
return json_decode($response->getBody(), true);
})
->subscribe(function ($data) {
print_r($data);
});
उदाहरण 4: स्ट्रीम को मर्ज और ज़िप करना
अक्सर कई स्ट्रीम को एक में जोड़ने की ज़रूरत होती है। दो ऑपरेटर्स देखें:
merge — स्ट्रीम को जोड़ता है, एलिमेंट्स को आने के क्रम में मिलाता है:
<?php
use Rx\Observable;
$stream1 = Observable::fromArray(['A1', 'A2', 'A3']);
$stream2 = Observable::fromArray(['B1', 'B2']);
Observable::merge([$stream1, $stream2])
->subscribe(function ($value) {
echo "$value ";
});
// आउटपुट: A1 B1 A2 B2 A3
zip — अलग-अलग स्ट्रीम के एलिमेंट्स को जोड़ीदार जोड़ता है (जैसे ज़िपर):
<?php
use पुस्तकालय में भी
Hangfire C# (.NET) पूर्ण गाइड: उदाहरणों के साथ
Node.js में S3 और क्लाउड स्टोरेज: @aws-sdk/client-s3 लाइब्रेरी
Rust में Dependency Injection कंटेनर: 'dicy' के उदाहरण के साथ समीक्षा और कार्यान्वयन
Crypto-js JavaScript (Node.js): पूरी गाइड उदाहरणों के साथ
Kotlin Symbol Processing (KSP) गाइड: कोटलिन कोड जनरेशन का पूरा ट्यूटोरियल