Laravel Reverb é um pacote para Laravel, uma estrutura de aplicação web PHP, que facilita a comunicação orientada a eventos em tempo real. Normalmente usa WebSockets para fornecer atualizações e interações em tempo real em aplicativos da web. Isso é útil para aplicativos que exigem atualizações instantâneas de dados, como aplicativos de bate-papo, notificações ao vivo e painéis em tempo real.

Na documentação do Laravel há instruções de como utilizá-lo em ambiente de teste e em produção utilizando Nginx como servidor. No entanto, não há instruções claras sobre como executá-lo no Apache2. Antes de nos aprofundarmos em como fazê-lo funcionar no Apache, precisamos primeiro entender como funciona o Laravel Reverb.
Princípio de trabalho
Embora você possa pensar que o Laravel Reverb lida com a comunicação de ida e volta através do Websocket, mergulhar na configuração irá delinear que também há necessidade de comunicação HTTP/HTTPS. Com base em nossa observação, o Laravel Reverb ajuda o frontend a receber em tempo real eventos despachados no backend (Laravel). Não há um guia claro sobre como você pode usar o canal aberto para enviar mensagens para o backend no frontend. Para fazer isso, você precisa enviar uma solicitação HTTP ao backend. A mesma lógica se aplica ao Laravel que deseja despachar eventos para o servidor WebSocket.

Considere este cenário de um site de comércio eletrônico onde um usuário adiciona produtos ao cartão e queremos que o ícone do carrinho aumente o número de itens no carrinho.
Create Amazing Websites
Com o melhor criador de páginas gratuito Elementor
Comece agora- O primeiro passo será conectar-se ao servidor WebSocket usando Laravel Echo (consulte a transmissão no laravel para mais detalhes) e ouvir um canal específico.
- No back-end, enviaremos um evento quando o produto do carrinho aumentar
- O Laravel irá acionar uma solicitação POST para o servidor WebSocket, que em troca enviará uma mensagem para o seu front end conectado a um canal.
Com base neste cenário, apenas configurar o WebSocket não é suficiente para fazê-lo funcionar, pois também precisamos habilitar o suporte para solicitação HTTP.
Configurando o WebSocket
Laravel Reverb faz uso de Node.js para lidar com a comunicação WebSocket. Durante o processo de instalação do Laravel Reverb , você notará o node js de alguma forma envolvido. Lendo a documentação do Laravel, você entenderá melhor a configuração básica necessária para a configuração inicial do reverb do Laravel.
Usando:
php artisan install:broadcasting
Você terá configurações padrão adicionadas ao seu arquivo .env. Por exemplo, seu: REVERB_APP_ID, REVERB_APP_KEY e REVERB_APP_SECRET serão configurados com valores personalizados padrão. A parte que você precisará configurar é a localização do servidor WebSocket e como o Laravel se comunica com ele.
Implantando WebSocket no subdomínio
Idealmente, você precisará criar um subdomínio. Embora seja verdade que você ainda pode hospedar tudo no mesmo domínio, você pode acabar com uma configuração Apache inchada. No entanto, dividir as coisas ajudará você a identificar rapidamente onde pode estar o problema (essa é minha opinião, você pode fazer o que quiser).
Vamos primeiro ter certeza de que nosso arquivo .env está pronto para o que queremos alcançar:
- REVERB_SERVER_HOST: 127.0.0.1
- REVERB_SERVER_PORT: 8080
- REVERB_HOST: ws.codewatchers.com
- REVERB_PORT: 443
- REVERB_SCHEME: https
Decidiremos criar um subdomínio chamado "ws.codewatchers.com" onde implantaremos nosso servidor WebSocket. Na sua situação, altere ws.codewatchers.com para o domínio de sua preferência.
<VirtualHost *:443>
ServerName ws.codewatchers.com
ServerAlias ws.codewatchers.com
ErrorLog ${APACHE_LOG_DIR}/ws.codewatchers.com-error.log
CustomLog ${APACHE_LOG_DIR}/ws.codewatchers.com-access.log combined
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /path/to/certificate/local.crt
SSLCertificateKeyFile /path/to/certificate/local.key
ProxyPass /app "ws://127.0.0.1:8080/app"
ProxyPassReverse /app "ws://127.0.0.1:8080/app"
</VirtualHost>
Observe que estamos usando SSL aqui, portanto, talvez seja necessário emitir um certificado para seu subdomínio. Você pode usar o Certbot para isso (o Bing Copilot irá ajudá-lo com isso).
Adicionando suporte para HTTP/S
Como dito acima, o servidor Laravel Reverb também precisa suportar solicitações HTTP regulares. Para isso, encaminhamos via proxy todas as solicitações que possuem /app para "ws://127.0.0.1:8080/app". É o segmento de URL usado para soquetes. Além disso, o Laravel usa /apps para enviar solicitações POST, então adicionaremos uma nova configuração à configuração do Apache que temos acima:
ProxyPass / "http://127.0.0.1:8080/"
ProxyPassReverse / "http://127.0.0.1:8080"
Aqui, queremos que outras solicitações que não tenham "/app" (estritamente) sejam encaminhadas por meio de solicitações HTTP regulares.
Depois de terminar isso, não se esqueça de recarregar a configuração do Apache usando isto:
sudo service apache2 reload
Configurando o Supervisor
O Supervisor é uma parte importante disso, pois iremos instruí-lo a executar o servidor de reverberação para nós. A parte boa aqui é que ele será reiniciado sempre que falhar na execução. temos, portanto, certeza de que o WebSocket estará sempre (ou quase) em execução. O Laravel tem uma seção brevemente detalhada para Supervisor , mas vamos nos aprofundar e dar um exemplo:
[program:laravel-reverb]
command=php artisan reverb:start
directory=/path/to/your/laravel/project
autostart=true
autorestart=true
stderr_logfile=/path/to/desired/logfile.log
stdout_logfile=/path/to/desired/logfile-out.log
user=ubuntu
Assumiremos que você o está executando no Ubuntu como usuário " ubuntu ". Você ajustará esses parâmetros conforme desejado.
Filas e agendamento de tarefas
Se você tem filas sendo executadas de forma assíncrona (banco de dados ou redis), você precisa ter certeza de que está bem configurado e funcionando. Na verdade, os eventos transmitidos são executados como trabalhos.

Pode ser necessário consultar a documentação do Laravel para configurar o Agendamento de Tarefas . Opcionalmente você instalará o Laravel Telescope , para monitorar seus trabalhos e inspecionar como ele é acionado.
Você também pode usar o console do navegador para verificar como seu WebSocket está funcionando.

Esperamos que este tutorial tenha sido útil para você. Se você tiver algum problema ao ler isto, informe-nos.