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

قبلا در مقاله ای با عنوان (کارهای Real-time در جنگو با Django Channels) به طور مفصل به انجام کارهای real-time در فریم ورک جنگو پرداخته ایم.

1. نصب کتابخانه‌های مورد نیاز

برای استفاده از وب سوکت در جنگو، باید از Django Channels استفاده کنید. ابتدا آن را نصب کنید:

pip install channels

Django Channels این امکان را فراهم می‌کند که جنگو بتواند درخواست‌های غیر از HTTP را نیز مدیریت کند، مانند WebSocket، HTTP/2 و حتی پروتکل‌های دیگر، با استفاده از Channels، می‌توانیم کانال‌هایی برای ارتباطات بلادرنگ بسازیم که برای مواردی مثل چت آنلاین، بروزرسانی‌های بلادرنگ داده‌ها و بازی‌های آنلاین مناسب است.

2. پیکربندی Channels

فایل settings.py را باز کرده و تنظیمات زیر را اضافه کنید:

INSTALLED_APPS += ['channels']

ASGI_APPLICATION = ‘myproject.asgi.application’

سپس یک فایل asgi.py ایجاد یا به‌روزرسانی کنید:

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from myapp.consumers import ChatConsumer

os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘myproject.settings’)

application = ProtocolTypeRouter({
“http”: get_asgi_application(),
“websocket”: AuthMiddlewareStack(
URLRouter([
# مسیر WebSocket را اینجا تعریف کنید
])
),
})

آموزش جنگو رایگان + سورس (17 ساعت ویدیو آموزشی)

3. تعریف Consumer

در فایل consumers.py، یک WebSocket Consumer تعریف کنید:

from channels.generic.websocket import AsyncWebsocketConsumer
import json

class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
await self.send(text_data=json.dumps({“message”: “WebSocket connected”}))

async def disconnect(self, close_code):
print(“WebSocket disconnected”)

async def receive(self, text_data):
data = json.loads(text_data)
await self.send(text_data=json.dumps({“response”: data}))

4. تنظیم URL

در فایل urls.py، مسیر مربوط به WebSocket را تعریف کنید:

from django.urls import path
from myapp.consumers import ChatConsumer

websocket_urlpatterns = [
path(“ws/chat/”, ChatConsumer.as_asgi()),
]

5. تست WebSocket

از ابزارهایی مانند Postman یا مرورگر برای اتصال به مسیر ws://localhost:8000/ws/chat استفاده کنید و پیام‌ها را ارسال و دریافت کنید.

نتیجه نهایی

این پیاده‌سازی ساده می‌تواند در مواردی مانند چت آنلاین، نوتیفیکیشن‌های لحظه‌ای و بازی‌های چندنفره استفاده شود.

کانال یوتیوب کدیتی