Você está na página 1de 24

Django Channels

Aplicações real time com Django


Quem sou eu?

Paula Grangeiro
Bacharel 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 ➔ Requisições/Respostas síncronas
entre um cliente e um servidor ➔ Possui ciclo de vida
◆ Cliente requisita (request)
◆ Servidor responde (response)
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
Consumers
Os 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ência
https://blog.heroku.com/in_deep_with_django_channels_the_future_of_real_time_a
pps_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

contato@paulagrangeiro.com.br

blog.paulagrangeiro.com.br

Você também pode gostar