Aplicações em tempo real com o
RATCHETAryel Tupinambá - PHP Conference 2016
Sobre o palestrante
Co-fundador e CTO da LQDI DigitalProjetos para empresas como Porto Seguro, Nestlé, Ticket, Editora FTD, Tishman Speyer e Ambev
13 anos trabalhando com PHPDesde a época que o PHPClasses era a onda :)
Aryel Tupinambá
Real-time
Real-time = reação imediata (à um evento externo)
Tempo normal vs tempo real
Uma nova mensagem de chat é enviada
A mensagem aparece na lista de mensagens
Uma notificação é recebida
Um alerta sonoro e uma caixa de mensagem surgem
Um post é atualizado pelo editor
O conteúdo do post é atualizado
Tempo "normal"Ação realizada RefreshEvento... Reação...
Tempo normal vs tempo real
Uma nova mensagem de chat é enviada
A mensagem aparece na lista de mensagens
Uma notificação é recebida
Um alerta sonoro e uma caixa de mensagem surgem
Um post é atualizado pelo editor
O conteúdo do post é atualizado
Tempo realAção realizadaEvento... Reação...
O HTTP clássico
Real-time com HTTP puro
Ajax (Polling) Ajax (Long Polling) HTTP streaming
Por que não usar HTTP então?
Overhead (sobrecarga)
da mensagem HTTP
da manutenção de conexão
Comunicação uni-direcional
WebSockets
WebSockets, onde roda
- Chrome, Firefox, Safari
- Internet Explorer 10+, Edge
- Internet Explorer 8 e 9 (via Flash polyfill)
- Mobile browsers (Android, iOS, Windows, etc)
WebSockets API
WebSockets API
Sobre o Ratchet
Topologia de uma app Ratchet
TCP
HTTP WebSockets
Ratchet Core
IoServer (sockets)
SessionProvider(sessões Symfony)
Sua aplicação
WampServer(canais, pub/sub)
WsServer(websockets)
Topologia de uma app Ratchet
Demo - EchoCódigo disponível em: http://github.com/DfKimera/phpconf16-ratchet/
Na prática - Chat
Código disponível em: http://github.com/DfKimera/phpconf16-ratchet/
Integrando aplicações existentes
Um post é atualizado pelo editor
O conteúdo do post é atualizado
Tempo realAção realizadaEvento... Reação...
Integrando aplicações existentes
Um post é atualizado pelo editor
O conteúdo do post é atualizado
PHP envia mensagem via WebSocket avisando da atualização
O usuário acessou o post original
Salva no BD
Servidor Ratchet recebe o aviso de atualização, e repassa para todos os clients conectados
JS no post conecta no servidor Ratchet
Cliente final (Browser)
Aplicação Back-end
(HTTP)
AplicaçãoRatchet
(WebSockets + WAMP)
Cliente final (Browser)
Aplicação Back-end
(HTTP)
AplicaçãoRatchet
(WebSockets + WAMP)
Aplicação Back-end
(HTTP)
AplicaçãoRatchet
(WebSockets + WAMP)
Cliente final (Browser)
Aplicação Back-end
(HTTP)
AplicaçãoRatchet
(WebSockets + WAMP)
Cliente final (Browser)
Aplicação Back-end
(HTTP)
AplicaçãoRatchet
(WebSockets + WAMP)
Cliente final (Browser)
Aplicação Back-end
(HTTP)
AplicaçãoRatchet
(WebSockets + WAMP)
Cliente final (Browser)
Aplicação Back-end
(HTTP)
AplicaçãoRatchet
(WebSockets + WAMP)
Cliente final (Browser)
Demo - Real-time postsCódigo disponível em: http://github.com/DfKimera/phpconf16-ratchet/
Aplicações mais complexas
The Web Application Messaging Protocol
- Suporte a múltiplas aplicações em um mesmo endpoint- Suporte a múltiplos canais- Implementa os patterns Publisher/Subscriber e Remote Procedure Call
Aplicações mais complexas
Autobahn|JS
- Implementa o protocolo WAMP no JavaScript- Oferece uma interface fluída para o pattern Publisher/Subscriber
O que mais dá pra fazer?
- Atualizações em tempo real (posts, comentários, feed, cotações, preços, destaques…)
- Games multiplayer em tempo real- Chats em grupo- Transferência de arquivos- Streaming de texto, voz e vídeo
(com WebSockets + WebRTC)
Gostei, quero ver mais!
Ratchet - WebSockets for PHP
Usando Laravel?
Obrigado!Dúvidas?
Telegram: @DfKimeraE-mail / Hangouts: [email protected]: http://facebook.com/aryel.tupinambaTwitter: http://twitter.com/DfKimeraLinkedIn: http://linkedin.com/in/aryeltupinamba
Slides da palestra: http://slideshare.net/aryeltupinamba
http://lqdi.net