Laravel Broadcasting

Laravel
Tempo de leitura: 4 minutos

Laravel Broadcasting: O Laravel Broadcasting é a solução elegante do framework para construir aplicações em tempo real usando o padrão Publish-Subscribe (Pub/Sub), geralmente via WebSockets. Ele permite que o servidor envie eventos de forma assíncrona para clientes conectados, viabilizando funcionalidades como chats, notificações instantâneas e dashboards dinâmicos sem a necessidade de o cliente ficar “perguntando” (polling) por atualizações.

1. ❓ O Que é e Como Funciona o Broadcasting

O Broadcasting no Laravel atua como um intermediário que pega um evento PHP comum e o “transmite” para um serviço externo (Driver) que gerencia as conexões WebSocket com os clientes.

Componentes Chave

  1. Evento (ShouldBroadcast): Uma classe de evento PHP marcada com a interface ShouldBroadcast.
  2. Broadcaster (Driver): O serviço que gerencia as conexões WebSocket (ex: Pusher, Redis/Swoole, Ably).
  3. Canais (Channels): Os “tópicos” ou “salas” onde os eventos são transmitidos e onde os clientes se inscrevem (assinaturas).
  4. Laravel Echo (Cliente): A biblioteca JavaScript que escuta os eventos do Driver no browser.

2. ⚙️ Configuração (Exemplo Pusher)

O Laravel suporta diversos drivers de broadcasting. O Pusher é o mais popular por ser um serviço gerenciado.

Configuração de Ambiente

As credenciais do driver são definidas no arquivo .env e referenciadas em config/broadcasting.php.

.ENV

# .env
BROADCAST_DRIVER=pusher 
PUSHER_APP_ID=...
PUSHER_APP_KEY=...
PUSHER_APP_SECRET=...
PUSHER_APP_CLUSTER=...

O config/broadcasting.php

Garanta que o driver pusher esteja configurado corretamente para usar as variáveis de ambiente.

PHP

// config/broadcasting.php
'default' => env('BROADCAST_DRIVER', 'log'),

'connections' => [
    'pusher' => [
        // ... (configurações do pusher)
    ],
],

3. ✍️ Criando e Disparando Eventos Broadcast

Passo 1: Criar o Evento

O evento deve implementar a interface ShouldBroadcast.

Bash

php artisan make:event NewComment

Passo 2: Definir o Evento e o Canal

Na classe do evento, você define:

  1. broadcastOn(): O canal (ou canais) para onde o evento será enviado.
  2. broadcastWith() (Opcional): Os dados que serão serializados e enviados aos clientes (se for diferente dos dados públicos do evento).

PHP

// App\Events\NewComment.php
class NewComment implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $comment;

    public function __construct(Comment $comment)   
    {
        $this->comment = $comment;
    }

    /**
     * O canal para onde o evento será transmitido.
     */
    public function broadcastOn(): array
    {
        // O evento será enviado para o canal 'comments' específico do post.
        return [new PresenceChannel('comments.' . $this->comment->post_id)];
    }

    /**
     * Dados a serem transmitidos (opcional).
     */
    public function broadcastWith(): array
    {
        return [
            'comment_id' => $this->comment->id,
            'body' => $this->comment->body,
        ];
    }
}

Tipos de Canais

CanalTipo de AssinaturaUso Típico
ChannelPúblico (Qualquer um pode ouvir).Notificações globais ou dados públicos.
PrivateChannelPrivado (Apenas usuários autenticados e autorizados).Notificações de usuário único.
PresenceChannelPresença (Privado, mas lista quais usuários estão online no canal).Salas de chat ou monitoramento de presença.

Passo 3: Disparar (Dispatch) o Evento

Basta disparar o evento no seu Controller ou Service quando a ação ocorrer (ex: após salvar o novo comentário).

PHP

// No Controller
$comment = $post->comments()->create($request->validated());

// Dispara o evento: o Laravel o enviará para o driver Pusher
event(new NewComment($comment)); 

4. 🎧 Laravel Echo: Ouvindo no Cliente

O Laravel Echo é o pacote JavaScript que facilita a conexão com o driver de broadcasting e a inscrição em canais.

Configuração do Echo

  1. Instalação (via npm ou Vite):Bashnpm install --save laravel-echo pusher-js
  2. Inicialização (em resources/js/app.js):

Javascript

import Echo from 'laravel-echo';
import Pusher from 'pusher-js';

window.Pusher = Pusher; 
window.Echo = new Echo({ 
    broadcaster: 'pusher', 
    key: import.meta.env.VITE_PUSHER_APP_KEY, // Usa as variáveis do .env do Vite 
    cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER, 
    forceTLS: true   
});

Inscrição e Escuta de Eventos

No seu código JavaScript, você se inscreve no canal correspondente e usa o método listen():

JavaScript

// Exemplo ouvindo o canal de comentários para o post de ID 1
window.Echo.channel('comments.1')
    .listen('NewComment', (e) => {
        // 'NewComment' é o nome da classe do evento PHP
        console.log('Novo comentário recebido!', e.body);
        // Atualiza a interface do usuário (DOM)
    });

✅ Conclusão Laravel Broadcasting

Laravel Broadcasting: É o pilar para construir aplicações em tempo real no Laravel. Ao usar a interface ShouldBroadcast em seus eventos e a biblioteca Laravel Echo no front-end, você pode enviar atualizações instantâneas de forma escalável, aprimorando significativamente a experiência do usuário com chats e notificações dinâmicas.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.