ZeroMQ সকার বিভিন্ন প্রকারভেদে বিভক্ত, যা ডেভেলপারদের বিভিন্ন মেসেজিং প্যাটার্ন বাস্তবায়ন করতে সহায়ক। ZeroMQ-এর প্রতিটি সকার প্রকার নির্দিষ্ট মেসেজিং প্যাটার্ন অনুসারে কাজ করে এবং ডিস্ট্রিবিউটেড সিস্টেম ও অ্যাপ্লিকেশন তৈরি করতে কার্যকরী। নিচে ZeroMQ সকারের প্রধান প্রকারগুলো এবং তাদের কার্যকারিতা নিয়ে আলোচনা করা হলো:
১. PUSH-PULL সকার
PUSH-PULL সকার প্যাটার্ন সাধারণত ওয়ার্ক লোড ডিস্ট্রিবিউশন এবং টাস্ক প্যারালেলাইজেশন এর জন্য ব্যবহৃত হয়।
PUSH সকার:
- এটি একটি প্রোডিউসার হিসেবে কাজ করে, যা মেসেজ পাঠায়।
- PUSH সকার পুল সকারের কাছে মেসেজ পাঠায়, কিন্তু এটি মেসেজ গ্রহণ করতে পারে না।
- এটি সাধারণত একটি ওয়ার্কার প্যাটার্নে ব্যবহার করা হয়, যেখানে PUSH সকার কাজ বা টাস্ক পাঠায় এবং একাধিক পুল সকার সেই কাজ গ্রহণ করে।
PULL সকার:
- এটি একটি কনসিউমার হিসেবে কাজ করে, যা মেসেজ গ্রহণ করে।
- PULL সকার কেবল মেসেজ গ্রহণ করতে পারে, এটি মেসেজ পাঠাতে পারে না।
- সাধারণত PULL সকার PUSH সকার থেকে টাস্ক গ্রহণ করে এবং প্রক্রিয়া করে।
PUSH-PULL উদাহরণ (Python):
import zmq
# PUSH সকার
context = zmq.Context()
push_socket = context.socket(zmq.PUSH)
push_socket.bind("tcp://*:5555")
for i in range(10):
push_socket.send_string(f"Task {i}")
# PULL সকার
context = zmq.Context()
pull_socket = context.socket(zmq.PULL)
pull_socket.connect("tcp://localhost:5555")
while True:
message = pull_socket.recv_string()
print(f"Received: {message}")
২. PUB-SUB সকার
PUB-SUB সকার প্যাটার্ন সাধারণত মাল্টিকাস্ট মেসেজিং এর জন্য ব্যবহৃত হয়। এটি এমন একটি প্যাটার্ন যেখানে একটি প্রকাশক (Publisher) একাধিক গ্রাহক (Subscriber) এর কাছে মেসেজ পাঠাতে পারে।
PUB (Publisher) সকার:
- এটি একটি মেসেজ পাঠানোর জন্য কাজ করে। এটি এক বা একাধিক সাবস্ক্রাইবারদের কাছে মেসেজ পাঠায়।
- PUB সকার মেসেজ পাঠায়, কিন্তু মেসেজ গ্রহণ করতে পারে না।
- এক বা একাধিক সাবস্ক্রাইবার এই প্রকাশকের সাথে সংযুক্ত থাকতে পারে।
SUB (Subscriber) সকার:
- এটি একটি মেসেজ গ্রহণকারী হিসেবে কাজ করে। এটি প্রকাশকের কাছ থেকে মেসেজ গ্রহণ করে।
- SUB সকার মেসেজ গ্রহণ করতে পারে, কিন্তু মেসেজ পাঠাতে পারে না।
- SUB সকার নির্দিষ্ট টপিক বা চ্যানেল সাবস্ক্রাইব করতে পারে এবং শুধুমাত্র সেই টপিকের মেসেজ গ্রহণ করতে পারে।
PUB-SUB উদাহরণ (Python):
# Publisher সকার
context = zmq.Context()
pub_socket = context.socket(zmq.PUB)
pub_socket.bind("tcp://*:5556")
while True:
pub_socket.send_string("topic1 Hello, this is a message!")
# Subscriber সকার
context = zmq.Context()
sub_socket = context.socket(zmq.SUB)
sub_socket.connect("tcp://localhost:5556")
sub_socket.setsockopt_string(zmq.SUBSCRIBE, "topic1") # টপিক সাবস্ক্রাইব করা
while True:
message = sub_socket.recv_string()
print(f"Received: {message}")
৩. REQ-REP সকার
REQ-REP (Request-Reply) সকার প্যাটার্ন ক্লায়েন্ট-সার্ভার মডেলের জন্য আদর্শ।
REQ (Request) সকার:
- এটি ক্লায়েন্ট হিসেবে কাজ করে, যা মেসেজ পাঠায় এবং উত্তর প্রত্যাশা করে।
- REQ সকার মেসেজ পাঠানোর পর মেসেজের উত্তর পাওয়ার জন্য অপেক্ষা করে।
REP (Reply) সকার:
- এটি সার্ভার হিসেবে কাজ করে, যা REQ সকার থেকে মেসেজ গ্রহণ করে এবং উত্তর পাঠায়।
- REP সকার প্রথমে মেসেজ গ্রহণ করে, তারপর উপযুক্ত উত্তর পাঠায়।
REQ-REP উদাহরণ (Python):
# REQ সকার (Client)
context = zmq.Context()
req_socket = context.socket(zmq.REQ)
req_socket.connect("tcp://localhost:5557")
req_socket.send_string("Hello Server")
message = req_socket.recv_string()
print(f"Received reply: {message}")
# REP সকার (Server)
context = zmq.Context()
rep_socket = context.socket(zmq.REP)
rep_socket.bind("tcp://*:5557")
while True:
message = rep_socket.recv_string()
print(f"Received: {message}")
rep_socket.send_string("Hello Client")
ZeroMQ সকার প্রকারভেদের সংক্ষেপে উপসংহার
| সকার প্রকার | ভূমিকা | ব্যবহার |
|---|---|---|
| PUSH | মেসেজ পাঠায়, গ্রহণ করতে পারে না | ওয়ার্ক লোড ডিস্ট্রিবিউশন |
| PULL | মেসেজ গ্রহণ করে, পাঠাতে পারে না | ওয়ার্ক লোড কনসিউমার |
| PUB | মেসেজ পাঠায়, এক বা একাধিক সাবস্ক্রাইবারের কাছে | মাল্টিকাস্ট মেসেজিং |
| SUB | মেসেজ গ্রহণ করে, নির্দিষ্ট টপিক সাবস্ক্রাইব করে | মাল্টিকাস্ট মেসেজ গ্রহণ |
| REQ | ক্লায়েন্ট হিসেবে মেসেজ পাঠায় এবং উত্তর প্রত্যাশা করে | ক্লায়েন্ট-সার্ভার মডেল |
| REP | সার্ভার হিসেবে মেসেজ গ্রহণ করে এবং উত্তর পাঠায় | ক্লায়েন্ট-সার্ভার মডেল |
উপসংহার
ZeroMQ সকার বিভিন্ন প্রকারভেদে বিভক্ত যা ডিস্ট্রিবিউটেড সিস্টেম এবং নেটওয়ার্ক প্রোগ্রামিংয়ে বিভিন্ন মেসেজিং প্যাটার্ন সমর্থন করে। PUSH-PULL, PUB-SUB, এবং REQ-REP সকারগুলি বিভিন্ন ধরণের মেসেজিং প্রয়োজন মেটাতে কার্যকরী। এই সকার প্যাটার্নগুলো ব্যবহার করে সহজেই মাল্টিকাস্ট মেসেজিং, ওয়ার্ক লোড ডিস্ট্রিবিউশন, এবং ক্লায়েন্ট-সার্ভার মডেল বাস্তবায়ন করা যায়, যা বড় এবং জটিল সিস্টেম তৈরি করতে সহায়ক।
Read more