Django Channels
Aplicações real time com Django
Quem sou eu?
Paula GrangeiroBacharel em Sistemas de Informação
Desenvolvedora de Software Sênior
PyLadies e Django Girls
Colecionadora de gatos
Aplicações Real Time
Como funciona a internet➔ A comunicação é estabelecida
entre um cliente e um servidor◆ Cliente requisita (request)◆ Servidor responde (response)
➔ Requisições/Respostas síncronas➔ Possui ciclo de vida
Aplicações Real Time
➔ O cliente necessita de uma resposta do servidor em “tempo real”.
➔ O cliente precisa se atualizar caso alguma informação mude no servidor.
➔ O cliente precisa manter a comunicação aberta com o servidor indefinidamente, para receber/enviar novos dados.
WebSockets➔ Protocolo HTML5 baseado no TCP ➔ Conexões assíncronas bidirecionais➔ Permite conexões não criptografadas e criptografadas
◆ ws: e wss: equivalentes à http: e https:
➔ Possui baixa latência➔ Suportado em:
◆ Internet Explorer 10+◆ Mozilla Firefox 4+◆ Safari 5+◆ Google Chrome 4+◆ Opera 11+
HTTP vs. WebSocket
Channels
Django Views
Django foi construído em cima do conceito de requisições e respostas da web HTTP, com requisições síncronas que possuem um ciclo de vida.
Django Channels➔ Adiciona ao Django suporte a
WebSockets de uma maneira similar às views HTTP
➔ Funciona essencialmente como um task manager◆ Mensagens que chegam são
alocadas em uma fila◆ A fila pode ser consumida por
N consumers
Instalação
Caso de Teste - Aplicação de Chat Online
Instalação e Configuração➔ pip install channels➔ Caso use Redis
◆ pip install asgi_redis➔ No settings.py
◆ “channels” in INSTALLED_APPS◆ Adicionar Redis no
CHANNEL_LAYERS
Configurando ASGI
O arquivo asgi.py deve substituir o wsgi.py criado automaticamente pelo Django no momento de criação do projeto.
Levantando o server➔ daphne chat.asgi:channel_layer --port 8888➔ python manage.py runworker
Implementação-
Backend
Arquivo de Rota
O arquivo routing.py equivale ao urls.py, nele são descritos cada channel que a aplicação suporta e seus equivalentes consumers.
Implementando ConsumersOs consumers são equivalentes às views.
Eles ouvem um channel em específico e são responsáveis por tratar as mensagens alocadas nele.
Implementando Consumers
Implementação-
Frontend
Conexão WebSocket
1. Criamos a conexão via WebSocket.
2. Pra cada submit do form, a mensagem é enviada via WebSocket.
3. Para cada nova mensagem publicada, os clientes que estão conectados no mesmo WebSocket são atualizados.
Mas isso Funciona?
Referênciahttps://blog.heroku.com/in_deep_with_django_channels_the_future_of_real_time_apps_in_django
https://udgwebdev.com/node-js-para-leigos-explorando-real-time/
http://websocket.org/echo.html
http://www.devmedia.com.br/uso-de-websockets-e-html5/32267
https://github.com/jacobian/channels-example
https://django-channels-example.herokuapp.com/
https://www.mmobomb.com/review/league-of-angels-2
Obrigada!
@paulagrangeiro
fb.me/paula.grangeiro
blog.paulagrangeiro.com.br