RxJava-তে Cold Observable এবং Hot Observable ডেটা স্ট্রিমের দুইটি ভিন্ন ধরন। এগুলো asynchronous ডেটা emission পরিচালনা করে ভিন্ন উপায়ে। এর সাথে, Subject ব্যবহার করে Observables এবং Observers-এর মধ্যে ব্রিজ তৈরি করা যায়।
Cold Observable
- Cold Observables subscriber-এর জন্য আলাদা data stream তৈরি করে।
- Data emission তখনই শুরু হয় যখন কোনো subscriber Observable-এ
subscribeকরে। - প্রতিটি subscriber একই data stream পুনরায় পায়।
উদাহরণ: Cold Observable
import io.reactivex.rxjava3.core.Observable;
public class ColdObservableExample {
public static void main(String[] args) {
Observable<Integer> coldObservable = Observable.just(1, 2, 3);
// প্রথম subscriber
coldObservable.subscribe(item -> System.out.println("Subscriber 1: " + item));
// দ্বিতীয় subscriber
coldObservable.subscribe(item -> System.out.println("Subscriber 2: " + item));
}
}
Output:
Subscriber 1: 1
Subscriber 1: 2
Subscriber 1: 3
Subscriber 2: 1
Subscriber 2: 2
Subscriber 2: 3
বৈশিষ্ট্য:
- প্রতিটি subscriber ডেটা emission পুনরায় শুরু করে।
- API calls, database queries ইত্যাদিতে ব্যবহৃত হয়।
Hot Observable
- Hot Observables subscriber-এমিশনের সময়ই ডেটা স্ট্রিম তৈরি করে।
- একটি shared data stream ব্যবহার করা হয়।
- নতুন subscriber আগে emitted ডেটা পায় না, কেবল নতুন ডেটা পায়।
উদাহরণ: Hot Observable (Subject ব্যবহার করে)
import io.reactivex.rxjava3.subjects.PublishSubject;
public class HotObservableExample {
public static void main(String[] args) {
PublishSubject<Integer> hotObservable = PublishSubject.create();
// প্রথম subscriber
hotObservable.subscribe(item -> System.out.println("Subscriber 1: " + item));
// ডেটা emission শুরু
hotObservable.onNext(1);
hotObservable.onNext(2);
// দ্বিতীয় subscriber যোগ করা
hotObservable.subscribe(item -> System.out.println("Subscriber 2: " + item));
hotObservable.onNext(3);
hotObservable.onComplete();
}
}
Output:
Subscriber 1: 1
Subscriber 1: 2
Subscriber 1: 3
Subscriber 2: 3
বৈশিষ্ট্য:
- নতুন subscriber পূর্বে emitted ডেটা পায় না।
- UI events, sensor data ইত্যাদির জন্য উপযুক্ত।
Subject-এর ভূমিকা
Subject RxJava-তে একটি বিশেষ কম্পোনেন্ট, যা Observable এবং Observer দুটোরই বৈশিষ্ট্য বহন করে। এটি Hot Observable তৈরিতে ব্যবহৃত হয়।
প্রধান প্রকারের Subject
- PublishSubject
- শুধুমাত্র নতুন subscribers-এর জন্য নতুন emitted ডেটা পাঠায়।
- BehaviorSubject
- সর্বশেষ emitted ডেটা এবং এর পরে নতুন ডেটা পাঠায়।
- ReplaySubject
- পূর্বে emitted সমস্ত ডেটা এবং পরবর্তী নতুন ডেটা পাঠায়।
- AsyncSubject
- শুধুমাত্র শেষ emitted ডেটা পাঠায় (completion signal-এর পরে)।
উদাহরণ: BehaviorSubject
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class BehaviorSubjectExample {
public static void main(String[] args) {
BehaviorSubject<String> behaviorSubject = BehaviorSubject.create();
// প্রথম subscriber যোগ করা
behaviorSubject.subscribe(item -> System.out.println("Subscriber 1: " + item));
behaviorSubject.onNext("A");
behaviorSubject.onNext("B");
// দ্বিতীয় subscriber যোগ করা
behaviorSubject.subscribe(item -> System.out.println("Subscriber 2: " + item));
behaviorSubject.onNext("C");
behaviorSubject.onComplete();
}
}
Output:
Subscriber 1: A
Subscriber 1: B
Subscriber 2: B
Subscriber 1: C
Subscriber 2: C
Cold vs Hot Observable তুলনা
| বৈশিষ্ট্য | Cold Observable | Hot Observable |
|---|---|---|
| Data Emission | Subscribe করার পর শুরু হয়। | নিরবচ্ছিন্নভাবে emission হয়। |
| Subscribers | প্রতিটি subscriber নতুন স্ট্রিম পায়। | একই স্ট্রিম শেয়ার করে। |
| Example Use Cases | API calls, database queries। | UI events, sensor data। |
উপসংহার
- Cold Observable: প্রতিটি subscriber-এর জন্য ডেটা পুনরায় প্রদান করে।
- Hot Observable: নতুন subscriber-এর জন্য কেবল নতুন emitted ডেটা প্রদান করে।
- Subject ব্যবহার করে Observables-কে Hot করা সম্ভব, এবং এটি Observables এবং Observers-এর মধ্যে ব্রিজ হিসেবে কাজ করে।
আপনার প্রয়োজন অনুযায়ী Cold বা Hot Observables নির্বাচন করে ডেটা স্ট্রিম পরিচালনা করুন।
Content added By
Read more