Real-time Communication এবং Data Streaming

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এর সাথে WebSocket এবং Real-Time Communication
200

FastAPI অত্যন্ত দ্রুত এবং কার্যকরী ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য ব্যবহৃত হয়, এবং এটি Real-time Communication এবং Data Streaming এর জন্য আধুনিক প্রযুক্তি সমর্থন করে। এখানে, আমরা জানবো কিভাবে FastAPI তে WebSockets এবং Server-Sent Events (SSE) ব্যবহার করে রিয়েল-টাইম কমিউনিকেশন এবং ডাটা স্ট্রিমিং করা যায়।


Real-time Communication

Real-time communication বা লাইভ ডাটা ট্রান্সফার হল এমন একটি প্রক্রিয়া, যার মাধ্যমে সিস্টেমের মধ্যে ডাটা তাত্ক্ষণিকভাবে প্রেরণ করা হয়। FastAPI তে, দুটি জনপ্রিয় প্রযুক্তি ব্যবহার করে রিয়েল-টাইম কমিউনিকেশন করা যায়:

  1. WebSockets
  2. Server-Sent Events (SSE)

WebSockets

WebSocket হল একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে পূর্ণ-দ্বিমুখী যোগাযোগ স্থাপন করে। এটি HTTP প্রোটোকলের উপর ভিত্তি করে তৈরি, তবে HTTP হ্যান্ডশেক শেষ হওয়ার পর এটি একটি পূর্ণ-দ্বিমুখী (Full-duplex) যোগাযোগ চ্যানেল খুলে দেয়। এর মাধ্যমে সার্ভার এবং ক্লায়েন্টের মধ্যে দ্রুত এবং স্বয়ংক্রিয়ভাবে ডাটা প্রেরণ করা যায়।

WebSocket উদাহরণ FastAPI তে

from fastapi import FastAPI, WebSocket, WebSocketDisconnect

app = FastAPI()

# WebSocket endpoint
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    try:
        while True:
            # Receive message from client
            data = await websocket.receive_text()
            print(f"Message received: {data}")
            # Send message to client
            await websocket.send_text(f"Message received: {data}")
    except WebSocketDisconnect:
        print("Client disconnected")

ব্যাখ্যা:

  • @app.websocket("/ws"): এটি একটি WebSocket এন্ডপয়েন্ট তৈরি করছে, যেখানে ক্লায়েন্টরা কানেক্ট করতে পারবে।
  • await websocket.accept(): WebSocket কানেকশনের শুরুতে সার্ভার ক্লায়েন্টের সাথে সংযোগ গ্রহণ করে।
  • await websocket.receive_text(): সার্ভার ক্লায়েন্ট থেকে টেক্সট মেসেজ গ্রহণ করে।
  • await websocket.send_text(): সার্ভার ক্লায়েন্টকে একটি টেক্সট মেসেজ প্রেরণ করে।
  • WebSocketDisconnect: ক্লায়েন্ট যদি সংযোগ বিচ্ছিন্ন করে, তাহলে WebSocketDisconnect এর মাধ্যমে সেশন বন্ধ হয়ে যাবে।

রিকোয়েস্ট উদাহরণ:

WebSocket ক্লায়েন্ট হতে পারে:

const socket = new WebSocket("ws://127.0.0.1:8000/ws");

socket.onopen = function(event) {
    console.log("Connection established");
    socket.send("Hello Server!");
};

socket.onmessage = function(event) {
    console.log("Message from server: " + event.data);
};

এখানে, ক্লায়েন্ট সার্ভারের সাথে কানেক্ট হবে, এবং Hello Server! বার্তা সার্ভারে পাঠাবে। সার্ভারও এর উত্তরে বার্তা ফেরত পাঠাবে।


Server-Sent Events (SSE)

Server-Sent Events (SSE) হল একটি একমুখী (one-way) যোগাযোগ পদ্ধতি, যেখানে শুধুমাত্র সার্ভার থেকে ক্লায়েন্টে ডাটা প্রেরণ করা হয়। এটি সাধারণত লগ, এলার্ট বা লাইভ ডাটা স্ট্রিমিং এর জন্য ব্যবহৃত হয়, যেখানে ক্লায়েন্ট বারবার সার্ভারে রিকোয়েস্ট না করে ধারাবাহিকভাবে ডাটা পেতে পারে।

SSE উদাহরণ FastAPI তে

from fastapi import FastAPI
from fastapi.responses import EventSourceResponse
import time

app = FastAPI()

# SSE endpoint
@app.get("/events/")
async def event_stream():
    async def event_publisher():
        while True:
            time.sleep(1)  # Simulate data streaming
            yield f"data: The current time is {time.ctime()}\n\n"
    return EventSourceResponse(event_publisher())

ব্যাখ্যা:

  • EventSourceResponse: FastAPI এর মাধ্যমে SSE রেসপন্স তৈরী করতে এটি ব্যবহার করা হয়।
  • event_publisher: এটি একটি অ্যাসিঙ্ক্রোনাস ফাংশন যা ধারাবাহিকভাবে ডাটা প্রেরণ করে। এখানে, প্রতি ১ সেকেন্ড পর time.ctime() দ্বারা সার্ভার বর্তমান সময় পাঠাচ্ছে।

রিকোয়েস্ট উদাহরণ:

এটি একটি SSE ক্লায়েন্ট হতে পারে:

const eventSource = new EventSource("http://127.0.0.1:8000/events/");

eventSource.onmessage = function(event) {
    console.log("New message from server: " + event.data);
};

এখানে, ক্লায়েন্ট সার্ভারের সাথে সংযোগ স্থাপন করবে এবং প্রতি সেকেন্ডে নতুন তথ্য (বর্তমান সময়) পাবে।


WebSockets এবং SSE এর মধ্যে পার্থক্য

বৈশিষ্ট্যWebSocketsServer-Sent Events (SSE)
কমিউনিকেশনদ্বিমুখী (Full-duplex)একমুখী (One-way)
ক্লায়েন্ট এবং সার্ভারউভয়ের মধ্যে মেসেজ আদান-প্রদানশুধুমাত্র সার্ভার থেকে ক্লায়েন্টে
ট্রান্সপোর্টTCP-based (WS)HTTP-based (SSE)
ব্যবহাররিয়েল-টাইম চ্যাট, গেম, কোল্যাবোরেশনলাইভ ডাটা স্ট্রিমিং, এলার্টস
পারফরম্যান্সউচ্চ পারফরম্যান্স, দুই-way কমিউনিকেশনসহজ এবং ক্লায়েন্ট-ফ্রেন্ডলি

Data Streaming

FastAPI তে Data Streaming পরিচালনা করতে, আমরা মূলত SSE বা WebSockets ব্যবহার করি, যেগুলো আমাদের স্ট্রিমিং ডাটা রিয়েল-টাইমে ক্লায়েন্টে পাঠাতে সক্ষম। এর মাধ্যমে, বড় ডাটা ফাইল বা টেকনিক্যাল কমিউনিকেশন দ্রুত এবং কার্যকরীভাবে সম্পাদন করা যায়।

Data Streaming উদাহরণ:

from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import io

app = FastAPI()

# File streaming
@app.get("/file/")
async def stream_file():
    file_content = b"Some large content..." * 1000  # Simulate large file content
    return StreamingResponse(io.BytesIO(file_content), media_type="application/octet-stream")

এখানে, StreamingResponse ব্যবহার করে একটি বড় ফাইল বা ডাটা স্ট্রিম ক্লায়েন্টে পাঠানো হচ্ছে। এটি খুবই কার্যকরী যখন আপনার কাছে বড় ফাইল বা ডাটা স্ট্রিমিং থাকে, যেমন ভিডিও স্ট্রিমিং বা বড় ডকুমেন্ট আপলোড/ডাউনলোড।


FastAPI তে Real-time Communication এবং Data Streaming সহজেই পরিচালনা করা যায় WebSockets এবং Server-Sent Events ব্যবহার করে। WebSockets দ্বিমুখী কমিউনিকেশন (full-duplex communication) এবং SSE একমুখী (one-way) স্ট্রিমিং ডাটা সেবা প্রদান করে। FastAPI এই প্রযুক্তিগুলো ব্যবহার করে দ্রুত, স্কেলেবল, এবং অত্যন্ত কার্যকরী রিয়েল-টাইম অ্যাপ্লিকেশন তৈরি করতে সহায়ক।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...