در این درس نحوه ایجاد یک سرور WebSocket ساده با استفاده از کتابخانههای پایه پایتون را بررسی میکنیم. این روش برای یادگیری عملکرد داخلی پروتکل و مدیریت اتصالها مناسب است، بدون اینکه به فریمورکهای آماده مثل FastAPI وابسته باشیم.
کتابخانههای مورد نیاز
- برای این مثال از کتابخانه websockets استفاده میکنیم. این کتابخانه ساده و سبک است و روی پایتون 3.6 به بالا کار میکند.
- همچنین از asyncio برای مدیریت اتصالها به صورت همزمان بهره میبریم.
نمونه کد سرور WebSocket
import asyncio
import websockets
# تابعی برای مدیریت اتصال هر کلاینت
async def handle_client(websocket, path):
print(f"کلاینت متصل شد: {websocket.remote_address}")
try:
async for message in websocket:
print(f"پیام دریافتی: {message}")
response = f"پیام شما دریافت شد: {message}"
await websocket.send(response)
except websockets.exceptions.ConnectionClosed:
print("کلاینت قطع شد.")
# اجرای سرور روی localhost و پورت 8765
async def main():
async with websockets.serve(handle_client, "localhost", 8765):
print("سرور WebSocket فعال شد روی ws://localhost:8765")
await asyncio.Future() # نگه داشتن سرور فعال
asyncio.run(main())
توضیح کد
- handle_client: هر اتصال جدید کلاینت را مدیریت میکند. پیامهای دریافتی را دریافت کرده و پاسخ مناسب میفرستد.
- websockets.serve: یک سرور WebSocket روی آدرس و پورت مشخص ایجاد میکند.
- asyncio: امکان اجرای همزمان چندین اتصال بدون بلاک کردن برنامه را فراهم میکند.
مزایا و محدودیتها
- مزایا: ساده، سبک و مناسب برای یادگیری عملکرد داخلی WebSocket و مدیریت پیامها.
- محدودیتها: برای برنامههای بزرگ و تولیدی نیاز به مدیریت اتصالهای بیشتر، احراز هویت و امنیت دارد که باید به صورت دستی پیادهسازی شود.