Com a evolução das aplicações web modernas, oferecer atualizações em tempo real se tornou essencial para melhorar a experiência do usuário. Seja em notificações, chats, sistemas de monitoramento ou dashboards, a comunicação instantânea é hoje um diferencial competitivo. Nesse contexto, o uso de WebSockets dentro do Laravel permite que os desenvolvedores entreguem funcionalidades em tempo real de maneira eficiente e elegante.
Este guia completo vai te mostrar como implementar WebSockets no Laravel, utilizando o pacote Laravel WebSockets, de forma prática e sem complicações. Vamos do zero até a emissão e recebimento de eventos em tempo real!
O que são WebSockets e por que usá-los?
Antes de colocar a mão na massa, é importante entender o que são WebSockets.
WebSockets são uma tecnologia que possibilita a comunicação bidirecional entre o cliente e o servidor através de uma única conexão TCP persistente. Diferente do modelo tradicional HTTP, que é baseado em requisições/respostas, os WebSockets permitem que o servidor envie dados para o cliente assim que uma atualização acontece, sem a necessidade de novas requisições.
Principais benefícios:
- Tempo real verdadeiro: Atualizações imediatas.
- Menos consumo de banda: Reduz o tráfego comparado ao polling.
- Experiência de usuário aprimorada: Menos latência e interações mais fluídas.
Preparando o ambiente no Laravel
Requisitos de sistema e pacotes necessários
Antes de começarmos, certifique-se de ter:
- Laravel 8 ou superior
- Composer instalado
- Node.js e NPM para lidar com o front-end (Laravel Echo)
- Redis instalado (opcional, mas recomendado para maior desempenho em broadcasting)
Além disso, vamos utilizar o pacote oficial Laravel WebSockets desenvolvido pela Beyond Code.
Instalando o Laravel WebSockets package
Dentro do seu projeto Laravel, rode o comando:
composer require beyondcode/laravel-websockets
Após a instalação, publique as configurações padrão:
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"
E também as migrations:
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
php artisan migrate
Isso cria a tabela necessária para monitorar conexões ativas.
Configurando o servidor WebSocket
Ajustando o websockets.php e broadcasting.php
No arquivo config/websockets.php, você pode ajustar detalhes como apps, dashboard e configuração de SSL se necessário.
No config/broadcasting.php, atualize o driver padrão para pusher, mesmo que esteja usando WebSockets locais:
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => false,
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'http',
],
],
],
Configure também as variáveis no seu .env:
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=local
PUSHER_APP_KEY=local
PUSHER_APP_SECRET=local
PUSHER_APP_CLUSTER=mt1
Executando o servidor localmente
Para rodar o servidor WebSocket localmente:
php artisan websockets:serve
Pronto! O seu servidor WebSocket já estará rodando na porta 6001.
Criando eventos e escutando em tempo real
Definindo eventos de broadcast
Vamos criar um evento de broadcast:
php artisan make:event NewMessage
No evento NewMessage.php, ajuste para implementar a interface ShouldBroadcast:
use Illuminate\Broadcasting\Channel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class NewMessage implements ShouldBroadcast
{
public $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastOn()
{
return new Channel('chat');
}
}
Isso permitirá que o evento seja enviado para todos os clientes conectados ao canal chat.
Front-end: Integrando com Laravel Echo
No front-end, instale o Laravel Echo e Pusher-js:
npm install --save laravel-echo pusher-js
Em seu JavaScript, configure o Echo:
import Echo from "laravel-echo";
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'local',
wsHost: window.location.hostname,
wsPort: 6001,
forceTLS: false,
disableStats: true,
});
window.Echo.channel('chat')
.listen('NewMessage', (e) => {
console.log('Nova mensagem:', e.message);
});
Assim, toda vez que o evento NewMessage for disparado no back-end, os clientes receberão a mensagem em tempo real!
Dicas de segurança e boas práticas
Autenticação de canais privados
Se seu app exige que apenas usuários autenticados possam ouvir certos eventos, use canais privados e configure políticas no arquivo routes/channels.php:
Broadcast::channel('chat', function ($user) {
return Auth::check();
});
Assim, apenas usuários autenticados conseguirão escutar o canal.
Gerenciamento de conexões
Sempre monitore e limite a quantidade de conexões abertas simultaneamente para evitar sobrecarga no servidor. Use o painel do Laravel WebSockets acessando /laravel-websockets no navegador.
Conclusão
Implementar WebSockets no Laravel não é complicado, e os ganhos para aplicações modernas são enormes. Com WebSockets, é possível criar experiências dinâmicas, intuitivas e altamente responsivas para os usuários.
Ao seguir este passo a passo, você configurará um sistema eficiente de comunicação em tempo real sem precisar de serviços pagos como Pusher. Além disso, terá controle total sobre seu servidor e poderá escalar de acordo com a necessidade do seu projeto.
Então, que tal começar agora mesmo a transformar sua aplicação Laravel em um app de verdade em tempo real?
🔥 Construa seus projetos com a melhor infraestrutura e ainda apoie o DevsBrasil!
Na Hostinger, você encontra hospedagem rápida, segura e com suporte top de linha — ideal para desenvolvedores e empreendedores digitais.
💡 Use o nosso link exclusivo do DevsBrasil e garanta:
✅ Descontos especiais nos planos de hospedagem, e-mail profissional, VPS e criador de sites com IA
✅ Ferramentas otimizadas para performance, com ótimo custo-benefício
✅ Apoio direto à nossa comunidade e ao nosso conteúdo gratuito 💚
👉 Acesse agora com nosso link exclusivo e aproveite os benefícios!