Multicasting হলো একটি কৌশল যা একাধিক সাবস্ক্রাইবারকে একই Observable এর মান পাঠানোর জন্য ব্যবহৃত হয়, যেন প্রত্যেকটি সাবস্ক্রাইবার একই ডেটা শেয়ার করতে পারে। RxJS এ multicasting প্রক্রিয়া বাস্তবায়ন করতে কয়েকটি অপারেটর রয়েছে, যার মধ্যে share() এবং shareReplay() অত্যন্ত জনপ্রিয়। এগুলি মূলত একাধিক সাবস্ক্রাইবারকে একটি একক Observable থেকে ডেটা পাঠানোর জন্য ব্যবহৃত হয় এবং performance উন্নত করতে সহায়তা করে।
এখানে আমরা আলোচনা করব কিভাবে share() এবং shareReplay() অপারেটরগুলি multicasting এর উদ্দেশ্যে ব্যবহৃত হয়।
1. share() অপারেটর
share() অপারেটরটি মূলত multicasting এর জন্য ব্যবহৃত হয় এবং এটি একটি Observable কে shared করে, যাতে একাধিক সাবস্ক্রাইবার একই Observable থেকে ডেটা পায়। এটি একটি Connectable Observable তৈরি করে, যা সব সাবস্ক্রাইবারের জন্য একই ডেটা পাঠায়।
বৈশিষ্ট্য:
- Hot Observable:
share()মূলত Cold Observable কে Hot Observable এ রূপান্তরিত করে, যাতে সব সাবস্ক্রাইবার একই ডেটা শেয়ার করে। - একই Observable-এ একাধিক সাবস্ক্রাইবার: একাধিক সাবস্ক্রাইবার একই Observable থেকে ডেটা পাবে এবং একাধিক সাবস্ক্রাইবার হলে তাদের মধ্যে কোনো ডেটা পুনরায় পাঠানো হয় না।
উদাহরণ:
import { of } from 'rxjs';
import { share } from 'rxjs/operators';
const observable = of('A', 'B', 'C').pipe(
share() // share() দিয়ে multicasting করা হচ্ছে
);
observable.subscribe(val => console.log(`Subscriber 1: ${val}`));
observable.subscribe(val => console.log(`Subscriber 2: ${val}`));
আউটপুট:
Subscriber 1: A
Subscriber 1: B
Subscriber 1: C
Subscriber 2: A
Subscriber 2: B
Subscriber 2: C
এখানে, share() অপারেটরটি দুটি সাবস্ক্রাইবারকে একই Observable থেকে ডেটা পাঠাতে অনুমতি দিয়েছে। একমাত্র একবার ডেটা উৎপন্ন হওয়ায়, এটি উভয় সাবস্ক্রাইবারের জন্য শেয়ার করা হয়েছে।
2. shareReplay() অপারেটর
shareReplay() অপারেটরটি multicasting এর পাশাপাশি caching এর সুবিধাও প্রদান করে। এটি মূলত সেই Observable থেকে পূর্ববর্তী মানগুলো সংরক্ষণ করে রাখে, এবং নতুন সাবস্ক্রাইবারদের সেই পূর্বের মানগুলো ফেরত দেয়। অর্থাৎ, এটি replay করে আগের ডেটা বা মানগুলো সাবস্ক্রাইবারকে পাঠায়।
বৈশিষ্ট্য:
- Replay: যখন একটি নতুন সাবস্ক্রাইবার যোগ হয়, তখন এটি আগের মানগুলি ফেরত দেয়, যাতে সাবস্ক্রাইবার পূর্ববর্তী ডেটাও দেখতে পারে।
- Hot Observable:
shareReplay()ও একটি Hot Observable তৈরি করে, যা সব সাবস্ক্রাইবারের জন্য একই ডেটা শেয়ার করে। - Caching: এটি পূর্ববর্তী মানগুলি ক্যাশে করে রাখে, এবং পরে সাবস্ক্রাইবারদের কাছে সেই ডেটা পাঠায়।
উদাহরণ:
import { of } from 'rxjs';
import { shareReplay } from 'rxjs/operators';
const observable = of('A', 'B', 'C').pipe(
shareReplay(1) // আগের ১টি মান (cache) replay করবে
);
observable.subscribe(val => console.log(`Subscriber 1: ${val}`));
observable.subscribe(val => console.log(`Subscriber 2: ${val}`));
আউটপুট:
Subscriber 1: A
Subscriber 1: B
Subscriber 1: C
Subscriber 2: C
এখানে, shareReplay(1) এর মাধ্যমে Subscriber 2 সাবস্ক্রাইব করার সময়, শুধুমাত্র শেষ মান (C) ফেরত পেয়েছে, যেহেতু shareReplay(1) অপারেটরটি একমাত্র শেষ মানটি ক্যাশে করে রেখেছিল।
share() এবং shareReplay() এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | share() | shareReplay() |
|---|---|---|
| Caching | কনেকশন শেষে মান হারিয়ে যায় | সাবস্ক্রাইবারদের জন্য পূর্ববর্তী মান ক্যাশে করে রাখে |
| Replay | কোনো replay না, সব সাবস্ক্রাইবারদের জন্য মান পুনরায় পাঠানো হয় না | সাবস্ক্রাইবারদের জন্য পূর্ববর্তী মান replay করা হয় |
| Use case | একাধিক সাবস্ক্রাইবারকে একই Observable থেকে মান শেয়ার করার জন্য | নতুন সাবস্ক্রাইবারদের জন্য আগের মান replay করার জন্য |
| Performance | একাধিক সাবস্ক্রাইবারের জন্য ডেটা পুনরায় উৎপন্ন হয় | আগের মানগুলো ক্যাশে করে রাখা হয়, তাই নতুন সাবস্ক্রাইবাররা সেই মান পায় |
সারাংশ
share()অপারেটরটি একাধিক সাবস্ক্রাইবারকে একই Observable থেকে ডেটা শেয়ার করতে সহায়তা করে এবং একটি Hot Observable তৈরি করে। এটি ডেটা শেয়ার করার সময় কোনো ক্যাশে বা replay বজায় রাখে না।shareReplay()অপারেটরটি multicasting এর সাথে caching এবং replaying এর সুবিধা দেয়। এটি পূর্ববর্তী মানগুলো ক্যাশে করে রাখে এবং নতুন সাবস্ক্রাইবারদের সেই মানগুলি পুনরায় পাঠায়।
এই দুটি অপারেটর RxJS এ multicasting এবং caching প্রযুক্তির জন্য গুরুত্বপূর্ণ এবং এগুলি ব্যবহার করে আপনি ডেটা স্ট্রিমের পারফরম্যান্স এবং কার্যকারিতা উন্নত করতে পারবেন।
Read more