WebSockets হল একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্বিমুখী যোগাযোগ (bidirectional communication) প্রতিষ্ঠা করতে সক্ষম। WebSocket একটি স্থায়ী কানেকশন বজায় রেখে কমপ্লেক্স রিয়েল-টাইম অ্যাপ্লিকেশন তৈরি করতে সহায়ক, যেমন চ্যাট অ্যাপ্লিকেশন, লাইভ স্কোর, রিয়েল-টাইম ডাটা ফিড ইত্যাদি।
FastAPI তে WebSocket এন্ডপয়েন্ট তৈরি করা খুবই সহজ এবং সরল। FastAPI WebSockets-এর জন্য websockets লাইব্রেরি ব্যবহার করে এবং এতে async ফাংশন ব্যবহার করা হয়।
এই গাইডে, আমরা একটি সাধারণ WebSocket এন্ডপয়েন্ট তৈরি করব যা FastAPI-তে কাজ করবে।
Step 1: FastAPI এবং WebSockets সেটআপ
FastAPI WebSockets সাপোর্ট করার জন্য আপনার সিস্টেমে websockets লাইব্রেরি ইনস্টল করা প্রয়োজন।
pip install fastapi websockets uvicorn
Step 2: WebSocket এন্ডপয়েন্ট তৈরি
এখন আমরা একটি WebSocket এন্ডপয়েন্ট তৈরি করব যেখানে ক্লায়েন্ট সার্ভারের সাথে সংযোগ করবে এবং সার্ভার থেকে মেসেজ গ্রহণ করবে।
উদাহরণ: WebSocket এন্ডপয়েন্ট
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept() # ক্লায়েন্টের সাথে কানেকশন গ্রহণ
try:
while True:
data = await websocket.receive_text() # ক্লায়েন্ট থেকে মেসেজ গ্রহণ
await websocket.send_text(f"Message received: {data}") # মেসেজের রেসপন্স পাঠানো
except WebSocketDisconnect:
print("Client disconnected")
এখানে, /ws হলো WebSocket এন্ডপয়েন্ট:
websocket.accept(): এটি ক্লায়েন্টের কানেকশন গ্রহণ করে।await websocket.receive_text(): এটি ক্লায়েন্ট থেকে টেক্সট মেসেজ গ্রহণ করে।await websocket.send_text(): এটি সার্ভার থেকে ক্লায়েন্টকে রেসপন্স পাঠায়।
WebSocket Connection-এর সময় ব্যবহৃত স্টেপ:
- ক্লায়েন্ট
/wsএন্ডপয়েন্টে কানেক্ট হবে। - সার্ভার ক্লায়েন্টকে একটি স্বীকৃতি পাঠাবে।
- ক্লায়েন্ট সার্ভারে মেসেজ পাঠাবে এবং সার্ভার তা রেসপন্স করবে।
Step 3: WebSocket কানেকশন টেস্ট করা
WebSocket এন্ডপয়েন্ট তৈরি করার পর, আপনি WebSocket client (যেমন ব্রাউজারের কনসোল বা অন্য কোন WebSocket ক্লায়েন্ট) দিয়ে পরীক্ষা করতে পারেন।
উদাহরণ: ব্রাউজার কনসোল ব্যবহার করে WebSocket কানেকশন
প্রথমে আপনার FastAPI অ্যাপ চালু করুন:
uvicorn app:app --reload- এখন, Chrome DevTools Console (বা অন্য ব্রাউজার) খুলুন এবং WebSocket কানেকশন তৈরি করতে নিম্নলিখিত কোডটি ব্যবহার করুন:
let socket = new WebSocket("ws://127.0.0.1:8000/ws");
socket.onopen = function(event) {
console.log("WebSocket is connected");
socket.send("Hello Server!"); // সার্ভারে মেসেজ পাঠান
};
socket.onmessage = function(event) {
console.log("Message from server:", event.data); // সার্ভারের রেসপন্স দেখুন
};
socket.onclose = function(event) {
console.log("WebSocket is closed");
};
এখানে:
socket.send("Hello Server!"): ক্লায়েন্ট সার্ভারে একটি মেসেজ পাঠায়।socket.onmessage: এটি সার্ভারের রেসপন্স গ্রহণ করে এবং কনসোলে প্রদর্শন করে।
সার্ভার রেসপন্স:
ক্লায়েন্ট যদি "Hello Server!" মেসেজ পাঠায়, তবে সার্ভার "Message received: Hello Server!" রেসপন্স পাঠাবে।
Step 4: WebSocket Disconnect Handling
WebSocket কানেকশন কখনো বন্ধ হতে পারে, যেমন যখন ক্লায়েন্ট কানেকশন বন্ধ করে দেয় বা নেটওয়ার্কে সমস্যা হয়। FastAPI তে WebSocketDisconnect এক্সসেপশন হ্যান্ডলিং ব্যবহার করে এই অবস্থাটি ম্যানেজ করা যায়।
উদাহরণ: WebSocket Disconnect Handling
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
try:
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message received: {data}")
except WebSocketDisconnect:
print("Client disconnected")
await websocket.close() # ক্লায়েন্ট ডিসকানেক্ট হলে সংযোগ বন্ধ করা
এখানে:
WebSocketDisconnect: এটি ধরা হয় যখন ক্লায়েন্ট সংযোগ বিচ্ছিন্ন করে।await websocket.close(): এটি ক্লায়েন্ট ডিসকানেক্ট হলে WebSocket বন্ধ করে দেয়।
Step 5: Testing the WebSocket Connection
WebSocket এর কাজ পরীক্ষা করতে একটি WebSocket Client ব্যবহার করতে পারেন, যেমন:
- Postman: WebSocket ক্লায়েন্ট সাপোর্ট করে, যেখানে আপনি WebSocket URL (যেমন
ws://127.0.0.1:8000/ws) দিয়ে সংযোগ পরীক্ষা করতে পারেন। - websocat: একটি কমান্ড লাইন WebSocket ক্লায়েন্ট যা WebSocket সেশনগুলি টেস্ট করতে সাহায্য করে।
উদাহরণ websocat ব্যবহার:
websocat ws://127.0.0.1:8000/ws
এটি আপনাকে WebSocket সার্ভারের সাথে সংযুক্ত করবে এবং আপনি মেসেজ পাঠাতে পারবেন।
FastAPI তে WebSocket এন্ডপয়েন্ট তৈরি করা খুবই সহজ। WebSocket ব্যবহার করে আপনি একে অপরের সাথে রিয়েল-টাইম তথ্য আদান-প্রদান করতে পারেন। FastAPI এর async এবং await ফিচারের সাহায্যে WebSocket সেশনগুলির সাথে অ্যাসিঙ্ক্রোনাসলি কাজ করা সম্ভব, যা আপনার অ্যাপ্লিকেশনকে আরও দ্রুত এবং স্কেলেবল করে তোলে। WebSocket ব্যবহার করে আপনি রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন, লাইভ আপডেট এবং অন্যান্য রিয়েল-টাইম ফিচার তৈরি করতে পারবেন।
Read more