O documento apresenta técnicas de aplicações em tempo real como polling, long polling, Server Sent Events e websockets. Ele também discute como implementar aplicações em tempo real com PHP usando o framework Ratchet. O autor demonstra ao vivo o desenvolvimento de um chat usando essas tecnologias.
2. Quem sou eu
Gustavo Castro
Tecnólogo em Sistemas para Internet (IFSUL - Passo Fundo)
Especializando em Ciência de Dados (Unopar - Passo Fundo)
Desenvolvedor PHP
Áreas de interesse: Bots, IoT, Embarcados, Programação paralela e distribuída.
3. Roteiro
● Uma visão sobre aplicações Realtime
● Técnicas Realtime
○ Polling
○ Long Polling
○ Server Sent Events (SSE)
○ Websockets
● PHP - Ratchet
4. Uma visão sobre aplicações Realtime
● O que são aplicações realtime?
○ Dados atualizados frequentemente
○ Velocidade nas interações
○ Sensação que está acontecendo “agora”
5. Uma visão sobre aplicações Realtime
● Principais áreas da utilização de aplicações realtime
○ Controle de tráfego aéreo
○ Bolsa de valores
○ Mensagens instantâneas
○ Transporte compartilhado
6. Técnicas Realtime
● Como funcionam as aplicações
realtime?
○ Como funciona a arquitetura cliente /
servidor?
■ Sempre começa pelo cliente
■ Se estabelece uma conexão
(Handshake)
■ Abre-se um canal para a troca
de mensagens
■ Encerra-se a conexão
Fonte: Do autor
7. Técnicas Realtime
● Polling
○ Cliente realiza requisições em intervalos regulares
○ O servidor retorna cada requisição
○ Não transmite sensação de realtime
■ Percebe-se a robotização no processo devido a
temporização
* handshake omitido no exemplo
Fonte: Do autor
8. Técnicas Realtime
● Long Polling
○ O cliente inicia conexão
○ Servidor mantém a conexão pelo maior tempo
possível
○ Ocorre evento para enviar os dados disponíveis
ou timeout
○ Cliente reinicia conexão imediatamente
* handshake omitido no exemplo
Fonte: Do autor
9. Técnicas Realtime
● Server Sent Events (SSE)
○ Cliente inicia conexão
○ Conexão unidirecional (servidor -> cliente)
○ Servidor envia respostas a cada evento
Fonte: Do autor
10. Técnicas Realtime
● Websocket
○ Cliente inicia conexão
○ Abre-se um canal bidirecional
○ Troca de mensagens até o encerramento
Fonte: Do autor
12. PHP
● “Implementa uma interface de baixo nível para funções de comunicação sockets baseadas
no popular BSD sockets, disponibilizando acionar como um servidor socket ou como um
cliente.” - PHP.net
● PHP 4.1.0 >=
● PHP 5.3.0 movido para o repositório PECL
○ --enable-sockets
17. PHP - Ratchet - Arquitetura
A arquitetura de um APP com Ratchet é basicamente sustentado por duas classes.
A que contém a lógica da aplicação e a que contém o servidor.
18. PHP - Ratchet - Arquitetura
Classe lógica
● Implementa a interface
MessageComponentInterface com os métodos:
○ onOpen(ConnectionInterface)
○ onMessage(ConnectionInterface, string)
○ onClose(ConnectionInterface)
○ onError(ConnectionInterface, Exception)
Classe servidor
● Implementa um webserver IO baseado
em HTTP/Websocket
20. PHP - Ratchet - ConnectionInterface
● ConnectionInterface
○ Atributos
■ ->resourceId
● Id da conexão
○ Métodos
■ ->send(string)
● Envia uma mensagem para o cliente da conexão
■ ->close()
● Encerra a conexão
21. PHP - Consumindo o Websocket
● Javascript
● HTML5
● “O objeto WebSocket provê uma API para criação e gerenciamento de uma conexão
WebSocket com um servidor, bem como o envio e recebimento de dados através dessa
conexão.” - MDN
● Compatibilidade:
Fonte:
https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket
22. PHP - Consumindo o Websocket
● Websocket API implementa os seguintes métodos
○ onopen(event)
○ onmessage(event)
○ onclose(event)
○ onerror(event)
25. Desenvolvimento de um chat
● Criar conta no Codenvy
○ https://codenvy.com/
● Montar a estrutura do projeto (script para acelerar o processo)
○ git clone https://github.com/debgustavocastro/oficina-websocket-php.git
○ mv oficina-websocket-php/install.sh ./
○ chmod +x install.sh
○ ./install.sh
27. Desenvolvimento de um chat
● Configuração autoload
○ composer.json
● Atualiza o autoloader
○ ./composer.phar dump-autoload -o
Fonte: Do autor
28. Desenvolvimento de um chat
● Criar classe com regras do chat
○ Implementando a interface MessageComponentInterface
● Criar serviço
○ HTTP Server / WS Server
● Implementar WS na aplicação cliente
Live code….
29. Desenvolvimento de um chat
● Levantando aplicação servidor
○ php chat-service.php
● Ngrok
○ Gera URLs públicas para teste de aplicações
○ ./ngrok http 8070
● Utilizar link do ngrok na aplicação cliente
30. Desenvolvimento de um chat
Fonte disponível em https://github.com/debgustavocastro/chat-websocket-server