Já ouviu falar de Channels? Não? Nesta talk vamos destrinchar um pouco mais dessa feature que permite requisições assíncronas no Django e que é perfeita para o desenvolvimento de aplicações real time.
Size: 958.08 KB
Language: pt
Added: Apr 30, 2017
Slides: 24 pages
Slide Content
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
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
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.