Workshop tocado por Daniel Sampaio e Lucas Souza (Virgo), da Beer and Code, com clima de aula prática do início ao fim: nada de slide, direto no código, projeto de chat já com migrations, models e front-end (Blade + AlpineJS) prontos para focar 100% no Reverb.
Destaques
- Modelagem do banco explicada com foco em performance: tabela
chats+ pivôchat_user(N-para-N) em vez de duas colunasfrom/to, evitando queries pesadas de busca de conversa a cada mensagem. - Instalação via
php artisan install:broadcasting, gerando.envcomREVERB_APP_ID/KEY/SECRET(mesmo esquema do Pusher, já que o Reverb implementa o mesmo protocolo) e os arquivosecho.js/bootstrap.js. - Chat global "efêmero" implementado só com
Echo.private()+whisper/listenForWhisper, sem tocar no back-end — usado para mostrar a diferença entre comunicação puramente front-end e broadcast via Laravel. - Lista de presença com
Echo.join(), eventos.here(),.joining()e.leaving()para saber quem está conectado em tempo real (caso de uso citado: evitar sobrescrita de dados quando duas pessoas mexem no mesmo registro). - Chat privado 1-a-1 persistido no banco: evento
NewMessage implements ShouldBroadcast, canal privadochat.{chatId}autorizado emroutes/channels.phpvalidando se o chat pertence ao usuário logado. - Indicador de "digitando" via
whispercom debounce (setTimeout) e notificações viaNotification+BroadcastMessage, com regra de front-end para não notificar quem já está na tela da conversa (usando o pacote Ziggy para rotas no JS). - Deploy real ao vivo: instância EC2 (t2.medium, ~US$15-16/mês), Nginx + PHP 8.3 + MySQL + NVM, com discussão sobre rodar
reverb:starte workers na mesma máquina para um MVP, e caminho para separar o servidor do Reverb quando precisar escalar.
Profundidade técnica
A aula foi além do "hello world" de WebSocket: discutiu debug de conexão pelo painel de rede do navegador (frame WS), o comando reverb:start --debug para inspecionar mensagens trafegando, e a pegadinha clássica de Sail/Docker de precisar expor a porta 8080 no docker-compose.yml. Também tratou segurança de canais privados com seriedade — reforçando que ofuscar IDs (UUID/slug) não substitui regra de autorização, e que o bloqueio de acesso indevido tem que estar na channel authorization (com exemplo prático de resposta a tentativa de acesso cruzado entre usuários). Ficou como desafio em aberto detectar inatividade do usuário na lista de presença (ideia discutida: monitorar eventos de mouse/teclado com timeout).
Faça parte do Clã
Se você curte esse tipo de conteúdo direto ao ponto — código na tela, decisão de arquitetura explicada e sem enrolação — esse é exatamente o tipo de encontro que rola com frequência lá no Clã Beer and Code. Além de acesso a workshops como esse, você tem mentoria técnica direta e uma comunidade de devs Laravel/PHP trocando experiência real de mercado. Vale a pena dar uma olhada.
Engenharia de IA virou profissão, e se aprende construindo, não assistindo. O Clã Beer and Code é o ambiente onde isso acontece ao vivo, toda semana: RAG, agentes, observabilidade e LLMOps em projetos reais, ao lado de quem já está em produção. É pago, é assinatura, e é exatamente o ambiente que estes encontros dão uma amostra.
Entrar no Clã