ZeroMQ ব্যবহার করে Request/Reply প্যাটার্নের ভিত্তিতে একটি ক্লায়েন্ট-সার্ভার প্রোগ্রাম তৈরি করা যায়, যেখানে ক্লায়েন্ট একটি অনুরোধ পাঠায় এবং সার্ভার সেই অনুরোধের উত্তরে একটি রেসপন্স পাঠায়। নিচে একটি পূর্ণাঙ্গ উদাহরণ দেওয়া হলো, যেখানে ক্লায়েন্ট এবং সার্ভার উভয়ই Python-এ তৈরি করা হয়েছে।
প্রোগ্রাম বিবরণ
- সার্ভার: সার্ভার
ZMQ_REP(Reply) সকেট ব্যবহার করে। এটি ক্লায়েন্ট থেকে একটি অনুরোধ গ্রহণ করে এবং একটি নির্দিষ্ট উত্তর (response) পাঠায়। - ক্লায়েন্ট: ক্লায়েন্ট
ZMQ_REQ(Request) সকেট ব্যবহার করে। এটি সার্ভারের কাছে একটি অনুরোধ পাঠায় এবং সার্ভার থেকে একটি রেসপন্স গ্রহণ করে।
সার্ভার কোড (Server)
import zmq
# ZeroMQ কনটেক্সট তৈরি করা
context = zmq.Context()
# REP সকেট তৈরি করা এবং একটি পোর্টে বাইন্ড করা
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555") # এখানে ৫৫৫৫ পোর্টে বাইন্ড করা হয়েছে
print("Server is running and waiting for requests...")
while True:
# ক্লায়েন্ট থেকে মেসেজ গ্রহণ করা
message = socket.recv_string()
print(f"Received request: {message}")
# ক্লায়েন্টকে রেসপন্স পাঠানো
response = f"Hello, you sent: {message}"
socket.send_string(response)
- ব্যাখ্যা:
zmq.Context()ZeroMQ-এর জন্য একটি কনটেক্সট তৈরি করে।socket.bind("tcp://*:5555")দিয়ে সার্ভারটি ৫৫৫৫ পোর্টে বাইন্ড করা হয়েছে।- সার্ভার একটি অনুরোধ গ্রহণ করে এবং
socket.send_string()মেথড দিয়ে ক্লায়েন্টকে একটি রেসপন্স পাঠায়।
ক্লায়েন্ট কোড (Client)
import zmq
# ZeroMQ কনটেক্সট তৈরি করা
context = zmq.Context()
# REQ সকেট তৈরি করা এবং সার্ভারের সাথে সংযোগ করা
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555") # localhost এবং ৫৫৫৫ পোর্টে সংযোগ
# ৫টি অনুরোধ পাঠানোর জন্য একটি লুপ
for i in range(5):
request_message = f"Request {i}"
print(f"Sending: {request_message}")
# সার্ভারকে মেসেজ পাঠানো
socket.send_string(request_message)
# সার্ভার থেকে রেসপন্স গ্রহণ করা
response = socket.recv_string()
print(f"Received reply {i}: {response}")
- ব্যাখ্যা:
socket.connect("tcp://localhost:5555")দিয়ে ক্লায়েন্ট সার্ভারের সাথে সংযুক্ত হয়েছে।forলুপের মাধ্যমে ক্লায়েন্ট সার্ভারে ৫টি অনুরোধ পাঠাচ্ছে।- ক্লায়েন্ট অনুরোধ পাঠানোর পর
socket.recv_string()দিয়ে সার্ভারের থেকে রেসপন্স গ্রহণ করছে।
প্রোগ্রাম চালানো
প্রথমে সার্ভার প্রোগ্রাম চালান:
এটি চালানোর পর সার্ভার চালু থাকবে এবং ক্লায়েন্টের অনুরোধের জন্য অপেক্ষা করবে।
python server.py
এরপর ক্লায়েন্ট প্রোগ্রাম চালান:
ক্লায়েন্ট প্রোগ্রাম চালানোর পর সার্ভারকে ৫টি অনুরোধ পাঠাবে এবং প্রতিটি অনুরোধের জন্য সার্ভার থেকে রেসপন্স গ্রহণ করবে।
python client.py
আউটপুট
সার্ভারের আউটপুট:
Server is running and waiting for requests...
Received request: Request 0
Received request: Request 1
Received request: Request 2
Received request: Request 3
Received request: Request 4
ক্লায়েন্টের আউটপুট:
Sending: Request 0
Received reply 0: Hello, you sent: Request 0
Sending: Request 1
Received reply 1: Hello, you sent: Request 1
Sending: Request 2
Received reply 2: Hello, you sent: Request 2
Sending: Request 3
Received reply 3: Hello, you sent: Request 3
Sending: Request 4
Received reply 4: Hello, you sent: Request 4
সারসংক্ষেপ
এই ক্লায়েন্ট-সার্ভার প্রোগ্রামটি ZeroMQ-এর Request/Reply প্যাটার্নের একটি উদাহরণ, যেখানে ক্লায়েন্ট সার্ভারে অনুরোধ পাঠায় এবং সার্ভার সেই অনুরোধের উত্তর দেয়। ZeroMQ-এর সাহায্যে এটি দ্রুত এবং নির্ভরযোগ্যভাবে কাজ করে। Request/Reply প্যাটার্ন সাধারণত ক্লায়েন্ট-সার্ভার মডেল, API কল, এবং ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়।
Read more