Встречается на собеседованиях • сегодня

Как в Django реализована работа с WebSocket

Django сам по себе не поддерживает WebSocket, так как работает по протоколу HTTP. Для работы с WebSocket в Django-проектах обычно используют:

  1. Channels - самое популярное решение. Это расширение Django, добавляющее поддержку асинхронных протоколов:
python
# consumers.py
from channels.generic.websocket import AsyncWebsocketConsumer

class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()
    
    async def disconnect(self, close_code):
        pass
    
    async def receive(self, text_data):
        await self.send(text_data="Echo: " + text_data)
  1. Настройка routing.py:
python
from django.urls import re_path
from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/chat/$', consumers.ChatConsumer.as_asgi()),
]
  1. Требуется ASGI-сервер (Daphne, Uvicorn) вместо WSGI. В settings.py:
python
ASGI_APPLICATION = 'project.routing.application'

Ключевые особенности:

  • Channels добавляет layer-систему для работы с сокетами
  • Поддерживает синхронный и асинхронный код
  • Интегрируется с Django ORM и сессиями
  • Требует Redis или другой бэкенд для layer'а в production

Для простых случаев можно использовать django-websocket, но Channels - более мощное решение.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы