django channels - aplicações real time com django

Post on 23-Jan-2018

478 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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?

top related