WebSocket হল একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে দুইমুখী যোগাযোগ (two-way communication) স্থাপন করতে ব্যবহৃত হয়। এটি HTTP প্রোটোকলের উপর ভিত্তি করে কাজ করে, তবে HTTP-এর তুলনায় এটি অনেক বেশি কার্যকর যখন real-time, ইনস্ট্যান্ট ডাটা ট্রান্সফার প্রয়োজন। FastAPI WebSocket ব্যবহার করে real-time অ্যাপ্লিকেশন তৈরি করতে সহায়ক।
WebSocket কী?
WebSocket একটি যোগাযোগ প্রোটোকল যা ক্লায়েন্ট (যেমন ব্রাউজার) এবং সার্ভারের মধ্যে স্টেটফুল (stateful) এবং পূর্ণ দ্বিমুখী (full-duplex) চ্যানেল তৈরি করে। WebSocket ব্যবহার করে, ক্লায়েন্ট এবং সার্ভার একে অপরের সাথে ইন্টারঅ্যাক্ট করতে পারে এবং ডাটা পাঠাতে ও গ্রহণ করতে পারে যখনই প্রয়োজন।
WebSocket-এর বৈশিষ্ট্য:
- দ্বিমুখী যোগাযোগ: সার্ভার এবং ক্লায়েন্ট একে অপরের সঙ্গে সমান্তরালভাবে ডাটা পাঠাতে এবং গ্রহণ করতে পারে।
- স্টেটফুল যোগাযোগ: একবার কানেকশন প্রতিষ্ঠিত হলে, এটি স্থায়ী থাকে, এবং ডাটা প্রেরণ বা গ্রহণ করতে কোনো অতিরিক্ত কানেকশন খোলার প্রয়োজন হয় না।
- নিরবচ্ছিন্ন যোগাযোগ: দীর্ঘ সময় ধরে একযোগভাবে ডাটা ট্রান্সফার করার জন্য WebSocket আদর্শ।
WebSocket কেন প্রয়োজন?
WebSocket বেশ কিছু সুনির্দিষ্ট পরিস্থিতিতে HTTP এর চেয়ে বেশি কার্যকর, বিশেষ করে যখন real-time ডাটা ট্রান্সফার দরকার।
১. Real-time Communication (ইনস্ট্যান্ট আপডেট)
HTTP প্রোটোকল রিকোয়েস্ট/রেসপন্স ভিত্তিক, যার মানে হল যে ক্লায়েন্ট সার্ভারের কাছে একটি রিকোয়েস্ট পাঠায় এবং তারপরে সার্ভার রেসপন্স পাঠায়। কিন্তু, WebSocketের মাধ্যমে ক্লায়েন্ট এবং সার্ভার অবিচ্ছিন্নভাবে যোগাযোগ করতে পারে। উদাহরণস্বরূপ:
- চ্যাট অ্যাপ্লিকেশন: একাধিক ব্যবহারকারীকে ইনস্ট্যান্ট মেসেজিং সিস্টেমে জড়িত রাখতে WebSocket প্রয়োজন।
- লাইভ আপডেট: যেমন, stock prices, sports scores বা news feed যেখানে ডাটা প্রতি সেকেন্ডে আপডেট হতে থাকে।
২. সর্বনিম্ন ল্যাটেন্সি (Low Latency)
WebSocket সেশন শুরু হওয়ার পরে, সার্ভার এবং ক্লায়েন্টের মধ্যে ডাটা একে অপরকে শেয়ার করার সময় বিলম্ব খুব কম থাকে। HTTP ব্যবহার করলে বারবার রিকোয়েস্ট/রেসপন্স প্রক্রিয়া ঘটাতে হয়, যা সময় নষ্ট করে।
৩. কম রিসোর্স খরচ (Less Overhead)
HTTP প্রতিটি রিকোয়েস্টের সাথে হেডার এবং মেটাডেটা প্রেরণ করে, যা প্রতি রিকোয়েস্টের জন্য অতিরিক্ত লোড তৈরি করে। WebSocketের ক্ষেত্রে একবার কানেকশন হয়ে গেলে, পরবর্তী সব বার্তা কেবল ডাটা হিসেবে প্রেরিত হয়, ফলে এটি অনেক কম রিসোর্স ব্যবহার করে।
৪. হ্যান্ডশেক ছাড়াই চলমান যোগাযোগ
HTTP-এর জন্য বারবার কানেকশন হ্যান্ডশেক করতে হয়, কিন্তু WebSocketের মধ্যে একবার কানেকশন স্থাপন হলে সেটি চালু থাকে, তাই এটি প্রক্রিয়াকে দ্রুত এবং আরও দক্ষ করে তোলে।
FastAPI তে WebSocket ব্যবহার
FastAPI তে WebSocket ব্যবহার করা খুবই সহজ। FastAPI এ WebSocket ক্লাস রয়েছে, যা আপনি WebSocket কানেকশন তৈরি করতে ব্যবহার করতে পারেন।
উদাহরণ: FastAPI WebSocket অ্যাপ্লিকেশন
from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message received: {data}")
এখানে:
@app.websocket("/ws"): এই ডেকোরেটরটি WebSocket এন্ডপয়েন্ট তৈরি করে।websocket.accept(): WebSocket কানেকশন গ্রহণ করা হয়।websocket.receive_text(): ক্লায়েন্ট থেকে ডাটা গ্রহণ করা হয়।websocket.send_text(): ক্লায়েন্টকে রেসপন্স পাঠানো হয়।
WebSocket ক্লায়েন্ট উদাহরণ (JavaScript):
let socket = new WebSocket("ws://localhost:8000/ws");
socket.onopen = function(event) {
socket.send("Hello, FastAPI!");
};
socket.onmessage = function(event) {
console.log("Message from server: ", event.data);
};
এখানে, JavaScript দিয়ে WebSocket কানেকশন তৈরি করা হয়েছে এবং FastAPI সার্ভারের সঙ্গে যোগাযোগ স্থাপন করা হয়েছে।
রিকোয়েস্ট/রেসপন্স:
- ক্লায়েন্ট: "Hello, FastAPI!"
- FastAPI সার্ভার: "Message received: Hello, FastAPI!"
FastAPI WebSocket-এ Asynchronous Programming
FastAPI তে async এবং await ব্যবহার করা হয় যাতে WebSocketের মাধ্যমে asynchronous কমিউনিকেশন করা যায়। এটি WebSocket এর মাধ্যমে ইনস্ট্যান্ট ডাটা প্রক্রিয়া করতে সহায়ক।
উদাহরণ: Asynchronous WebSocket
from fastapi import FastAPI, WebSocket
import asyncio
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await asyncio.sleep(1) # simulate some processing delay
await websocket.send_text(f"Processed message: {data}")
এখানে, asyncio.sleep(1) ব্যবহার করা হয়েছে, যা WebSocketের মাধ্যমে কিছুটা লেটেন্সি বা প্রসেসিং ডিলে তৈরি করতে পারে এবং তা সঠিকভাবে Asynchronous পদ্ধতিতে কাজ করে।
WebSocket হল একটি শক্তিশালী প্রোটোকল যা FastAPI তে real-time যোগাযোগের জন্য ব্যবহৃত হয়। এটি সার্ভার এবং ক্লায়েন্টের মধ্যে একযোগভাবে দুইমুখী যোগাযোগ স্থাপন করতে সক্ষম, যা লাইভ আপডেট, চ্যাট অ্যাপ্লিকেশন, গেম, এবং অন্য অনেক ধরনের অ্যাপ্লিকেশন তৈরিতে অপরিহার্য। FastAPI তে WebSocket ব্যবহার করে আপনি দ্রুত এবং কার্যকর real-time অ্যাপ্লিকেশন তৈরি করতে পারেন।
Read more