Django Channels - Aplicações real time com Django

PaulaGrangeiro 3,213 views 24 slides Apr 30, 2017
Slide 1
Slide 1 of 24
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24

About This Presentation

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.


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.

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
[email protected]
blog.paulagrangeiro.com.br