Laravel Reverb es un paquete para Laravel, un marco de aplicación web PHP, que facilita la comunicación basada en eventos en tiempo real. Normalmente utiliza WebSockets para proporcionar actualizaciones e interacciones en tiempo real en aplicaciones web. Esto es útil para aplicaciones que requieren actualizaciones de datos instantáneas, como aplicaciones de chat, notificaciones en vivo y paneles de control en tiempo real.
En la documentación de Laravel, hay instrucciones sobre cómo usarlo en un entorno de prueba y en producción usando Nginx como servidor. Sin embargo, no hay instrucciones claras sobre cómo ejecutarlo en Apache2. Antes de profundizar en cómo hacer que funcione en Apache, primero debemos comprender cómo funciona Laravel Reverb.
Principio de funcionamiento
Si bien podría pensar que Laravel Reverb maneja la comunicación de ida y vuelta a través de Websocket, profundizar en la configuración indicará que también existe la necesidad de comunicación HTTP/HTTPS. Según nuestra observación, Laravel Reverb ayuda al frontend a recibir en tiempo real eventos enviados al backend (Laravel). No existe una guía clara sobre cómo desde el frontend se puede utilizar el canal abierto para enviar mensajes al backend. Para hacerlo, debe enviar una solicitud HTTP al backend. La misma lógica se aplica a Laravel que quiere enviar eventos al servidor WebSocket.
Considere este escenario de un sitio web de comercio electrónico donde un usuario agrega productos a la tarjeta y queremos que el ícono del carrito aumente la cantidad de artículos en el carrito.
Create Amazing Websites
Con el mejor generador de páginas gratuito Elementor
Empezar ahora- El primer paso será conectarse al servidor WebSocket usando Laravel Echo (consulte transmisión en laravel para más detalles) y escuchar un canal específico.
- Desde el backend, enviaremos un evento cuando el producto del carrito haya aumentado.
- Laravel activará una solicitud POST al servidor WebSocket, que a cambio enviará un mensaje a su interfaz conectada a un canal.
Según este escenario, simplemente configurar WebSocket no es suficiente para que funcione, ya que también debemos habilitar la compatibilidad con solicitudes HTTP.
Configurando el WebSocket
Laravel Reverb utiliza Node.js para manejar la comunicación WebSocket. Durante el proceso de instalación de Laravel Reverb , notarás que el nodo js está involucrado de alguna manera. Al leer la documentación de Laravel, comprenderá mejor la necesidad de configuración básica para la configuración inicial de la reverberación Laravel.
Mediante el uso:
php artisan install:broadcasting
Se agregarán configuraciones predeterminadas a su archivo .env. Por ejemplo, su: REVERB_APP_ID, REVERB_APP_KEY y REVERB_APP_SECRET se configurarán con valores personalizados predeterminados. La parte que necesitarás configurar es la ubicación del servidor WebSocket y cómo se comunica Laravel con él.
Implementación de WebSocket en un subdominio
Idealmente, necesitarás crear un subdominio. Si bien es cierto que aún puedes alojar todo en el mismo dominio, podrías terminar con una configuración de Apache inflada. Sin embargo, dividir las cosas te ayudará a detectar rápidamente dónde podría estar el problema (esa es mi opinión, puedes hacer lo que quieras).
Primero asegurémonos de que nuestro archivo .env esté listo para lo que queremos lograr:
- REVERB_SERVER_HOST: 127.0.0.1
- REVERB_SERVER_PORT: 8080
- REVERB_HOST: ws.codewatchers.com
- PUERTO_REVERB: 443
- REVERB_SCHEME: https
Decidiremos crear un subdominio llamado "ws.codewatchers.com" donde implementaremos nuestro servidor WebSocket. En su situación, cambie ws.codewatchers.com al dominio de su agrado.
<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>
Tenga en cuenta que aquí utilizamos SSL, por lo que es posible que necesite emitir un certificado para su subdominio. Puedes usar Certbot para eso (Bing Copilot te ayudará con eso).
Agregar soporte para HTTP/S
Como se dijo anteriormente, el servidor Laravel Reverb también debe admitir solicitudes HTTP regulares. Para ello, hemos reenviado a través de proxy todas las solicitudes que tengan /app a "ws://127.0.0.1:8080/app". Es el segmento de URL utilizado para los sockets. Además, Laravel usa /apps para enviar solicitudes POST, por lo que agregaremos una nueva configuración a la configuración de Apache que tenemos arriba:
ProxyPass / "http://127.0.0.1:8080/"
ProxyPassReverse / "http://127.0.0.1:8080"
Aquí, queremos que otras solicitudes que no tengan "/app" (estrictamente) se reenvíen a través de solicitudes HTTP normales.
Una vez que haya terminado con esto, no olvide recargar la configuración de Apache usando esto:
sudo service apache2 reload
Configurar supervisor
Supervisor es una parte importante de esto, ya que le indicaremos que ejecute el servidor de reverberación por nosotros. Lo bueno aquí es que lo reiniciará cada vez que no se ejecute. Por lo tanto, estamos seguros de que WebSocket siempre (o casi) estará ejecutándose. Laravel tiene una sección breve detallada para Supervisor , pero profundizaremos y daremos un ejemplo:
[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
Asumiremos que lo estás ejecutando en Ubuntu como el usuario " ubuntu ". Ajustará esos parámetros como desee.
Colas y programación de tareas
Si tiene colas que se ejecutan de forma asincrónica (base de datos o redis), debe asegurarse de que esté bien configurada y en ejecución. De hecho, los eventos que se transmiten se ejecutan como trabajos.
Es posible que deba consultar la documentación de Laravel para configurar la programación de tareas . Opcionalmente, instalará Laravel Telescope para monitorear sus trabajos e inspeccionar cómo se activa.
También puede utilizar la consola del navegador para comprobar cómo está funcionando su WebSocket.
Esperamos que este tutorial haya sido útil para usted; si tuvo algún problema al leer esto, háganoslo saber.