Перейти до змісту

Channels and WebSocket

WebSocket connection живе довше, ніж HTTP request, тому його обробляє Consumer.

Що студент вивчить

  • базову ментальну модель теми;
  • як тема працює у Django;
  • де її побачити у фінальному проєкті;
  • як перевірити, що розуміння не лише теоретичне.

Передумови

  • Вміти відкрити репозиторій.
  • Розуміти, що всі шляхи в документації відносні до кореня notes_chat_app.

Flow

sequenceDiagram
Browser->>ASGI: WebSocket handshake
ASGI->>Consumer: connect
Consumer->>ChannelLayer: group_add
Browser->>Consumer: message
Consumer->>ChannelLayer: group_send
ChannelLayer->>Browser: broadcast via consumer

Channel layer

Якщо REDIS_URL задано, використовується Redis. Якщо ні - InMemoryChannelLayer, придатний лише для одного процесу.

Де це знайти у фінальному проєкті

Файл Що подивитися
notes_app/consumers.py connect, receive, disconnect
notes_app/static/notes_app/js/group_chat.js browser WebSocket client
notes_app/models.py ChatMessage

Практичне завдання

Створіть групу, відкрийте chat page у двох browser sessions і перевірте broadcast.

Контрольні питання

  • Що є входом у цей процес?
  • Який результат очікується?
  • Де найчастіше виникає помилка?
  • Яка команда або test допомагає перевірити зміну?

Далі

Далі: Linux and DevOps.