فشرده‌سازی داده‌ها در WebSocket

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/06/25
  • تعداد بازدید: 2

فشرده‌سازی داده‌ها در WebSocket به کاهش مصرف پهنای باند و افزایش سرعت انتقال پیام‌ها کمک می‌کند. یکی از روش‌های رایج برای فشرده‌سازی استفاده از الگوریتم Gzip است که برای پیام‌های متنی و بزرگ بسیار مناسب است. با Gzip، داده‌ها قبل از ارسال فشرده می‌شوند و در سمت دریافت، باز می‌شوند.

مزایای استفاده از Gzip

  • کاهش مصرف پهنای باند شبکه
  • افزایش سرعت ارسال و دریافت داده‌ها
  • سازگاری بالا با اکثر زبان‌ها و کتابخانه‌های WebSocket
  • قابلیت استفاده برای داده‌های متنی و JSON بزرگ

نکات مهم

  • سرور و کلاینت باید هر دو از Gzip پشتیبانی کنند و فرآیند فشرده‌سازی و باز کردن فشرده‌سازی هماهنگ باشد.
  • برای داده‌های کوچک، فشرده‌سازی ممکن است سود زیادی نداشته باشد و حتی سربار ایجاد کند.
  • در برنامه‌های Real-Time با حجم داده زیاد مانند چت‌های گروهی، داشبوردهای لحظه‌ای و بازی‌های آنلاین، استفاده از Gzip توصیه می‌شود.

نمونه کد سرور FastAPI با Gzip

from fastapi import FastAPI, WebSocket, WebSocketDisconnect
import gzip

app = FastAPI()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    try:
        while True:
            # دریافت پیام فشرده از کلاینت
            compressed_data = await websocket.receive_bytes()
            data = gzip.decompress(compressed_data).decode("utf-8")
            print(f"Received: {data}")
            
            # آماده‌سازی پاسخ و فشرده‌سازی
            response_message = f"Server received: {data}"
            compressed_response = gzip.compress(response_message.encode("utf-8"))
            await websocket.send_bytes(compressed_response)
    except WebSocketDisconnect:
        print("Client disconnected")

نمونه کلاینت پایتون با Gzip

import asyncio
import websockets
import gzip

async def websocket_client():
    uri = "ws://127.0.0.1:8000/ws"
    async with websockets.connect(uri) as websocket:
        while True:
            message = input("Enter your message: ")
            
            # فشرده‌سازی پیام قبل از ارسال
            compressed_message = gzip.compress(message.encode("utf-8"))
            await websocket.send(compressed_message)
            
            # دریافت پاسخ فشرده و باز کردن فشرده‌سازی
            compressed_response = await websocket.recv()
            response = gzip.decompress(compressed_response).decode("utf-8")
            print(f"Server response: {response}")

asyncio.run(websocket_client())

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.