Saltar al contenido principal
Esta página se centra en la instalación y operación del propio servidor Reverb. Para la creación de eventos de broadcast y el uso de Laravel Echo, consulta Broadcasting.

¿Qué es Reverb?

Laravel Reverb es un servidor WebSocket auto-hospedado que ofrece oficialmente Laravel. Permite añadir comunicación en tiempo real rápida y escalable a tu aplicación Laravel sin depender de servicios externos. Reverb funciona sobre la infraestructura de broadcasting y se encarga de entregar eventos del servidor al navegador a través de WebSocket.

Instalación

Con el comando Artisan install:broadcasting puedes instalar de golpe todas las dependencias, incluida Reverb.
php artisan install:broadcasting
Elige Reverb durante el proceso o pasa la opción --reverb para configurarlo automáticamente.
php artisan install:broadcasting --reverb
Este comando hace lo siguiente:
  • Instala el paquete Composer (laravel/reverb)
  • Instala los paquetes NPM (laravel-echo, pusher-js)
  • Añade las variables de entorno a .env
  • Genera config/reverb.php
Si prefieres instalarlo manualmente, añade el paquete con Composer y ejecuta reverb:install.
composer require laravel/reverb
php artisan reverb:install

Configuración

Credenciales de la aplicación

Configura mediante variables de entorno las credenciales que cliente y servidor usarán para establecer la conexión.
REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-secret
Estos valores se leen en la sección apps de config/reverb.php.

Orígenes permitidos (Allowed Origins)

Puedes restringir los orígenes de las solicitudes cliente en allowed_origins de config/reverb.php.
'apps' => [
    [
        'app_id' => 'my-app-id',
        'allowed_origins' => ['laravel.com'],
        // ...
    ]
]
Para permitir todos los orígenes indica *.

Soporte multi-aplicación

Un único servidor Reverb puede atender varias aplicaciones. Añade varias entradas en el array apps de config/reverb.php.
'apps' => [
    [
        'app_id' => 'my-app-one',
        // ...
    ],
    [
        'app_id' => 'my-app-two',
        // ...
    ],
],

Configuración de SSL

En producción es habitual que Nginx u otro servidor web se encargue de la terminación SSL y actúe como proxy hacia Reverb. Si quieres usar Secure WebSocket (wss://) en desarrollo local, puedes aprovechar los certificados de Laravel Herd o Valet.
php artisan reverb:start --host="0.0.0.0" --port=8080 --hostname="laravel.test"
Si necesitas indicar los certificados manualmente, configura la opción tls en config/reverb.php.
'options' => [
    'tls' => [
        'local_cert' => '/path/to/cert.pem'
    ],
],

Arrancar el servidor

Arranca el servidor con el comando Artisan reverb:start.
php artisan reverb:start
Por defecto escucha en 0.0.0.0:8080. Puedes indicar una dirección personalizada con las opciones --host / --port.
php artisan reverb:start --host=127.0.0.1 --port=9000
También puedes configurarlo mediante variables de entorno.
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080
REVERB_SERVER_HOST / REVERB_SERVER_PORT son la dirección en la que escucha el propio servidor. REVERB_HOST / REVERB_PORT son la dirección a la que la aplicación Laravel envía los mensajes de broadcast. En producción pueden ser distintas.

Modo debug

Por rendimiento, Reverb no imprime información de depuración por defecto. Para ver el flujo de conexiones y mensajes, usa la opción --debug.
php artisan reverb:start --debug

Reinicio del servidor

Reverb es un proceso residente, así que para reflejar cambios de código necesita reiniciarse. El comando reverb:restart finaliza todas las conexiones de forma elegante y detiene el servidor.
php artisan reverb:restart
Si usas un gestor de procesos como Supervisor, se reiniciará automáticamente tras la parada.

Monitorización

Reverb se integra con Laravel Pulse. Puedes mostrar en tiempo real en el dashboard el número de conexiones y mensajes. Primero añade los recorders de Reverb en config/pulse.php.
use Laravel\Reverb\Pulse\Recorders\ReverbConnections;
use Laravel\Reverb\Pulse\Recorders\ReverbMessages;

'recorders' => [
    ReverbConnections::class => [
        'sample_rate' => 1,
    ],

    ReverbMessages::class => [
        'sample_rate' => 1,
    ],

    // ...
],
Después, añade las cards en la plantilla del dashboard de Pulse.
<x-pulse>
    <livewire:reverb.connections cols="full" />
    <livewire:reverb.messages cols="full" />
    ...
</x-pulse>
Para registrar correctamente el estado de las conexiones, ejecuta el daemon pulse:check en el servidor de Reverb. En configuraciones de escalado horizontal, ejecuta pulse:check solo en un servidor.

Operación en producción

Límite de archivos abiertos

Cada conexión WebSocket consume un descriptor de archivo. Comprueba el límite del sistema y súbelo si es necesario.
ulimit -n
Puedes cambiar el límite en /etc/security/limits.conf.
# /etc/security/limits.conf
forge        soft  nofile  10000
forge        hard  nofile  10000

Bucle de eventos (ext-uv)

Reverb usa por defecto stream_select de PHP, con un máximo de 1.024 archivos. Para manejar más de 1.000 conexiones concurrentes, instala ext-uv para levantar el límite.
pecl install uv
Si ext-uv está disponible, Reverb lo usará automáticamente.

Proxy inverso con Nginx

En producción no expongas Reverb directamente: haz proxy con Nginx u otro servidor web. Ejemplo de configuración de Nginx:
server {
    ...

    location / {
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        proxy_pass http://0.0.0.0:8080;
    }

    ...
}
Reverb recibe las conexiones WebSocket en /app y las solicitudes API en /apps. Permite el acceso a ambas URIs en la configuración del servidor web.
Para aumentar el número de conexiones concurrentes, ajusta worker_rlimit_nofile y worker_connections en nginx.conf.
user forge;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
worker_rlimit_nofile 10000;

events {
  worker_connections 10000;
  multi_accept on;
}

Gestión de procesos (Supervisor)

En producción, gestiona el proceso Reverb con Supervisor. Configura minfds en supervisor.conf para asegurar los descriptores necesarios.
[supervisord]
...
minfds=10000
Ejemplo de configuración de Supervisor:
[program:reverb]
process_name=%(program_name)s
command=php /path/to/artisan reverb:start
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/path/to/reverb.log

Escalado (Redis)

Cuando un solo servidor no soporta todas las conexiones, es posible escalar horizontalmente con la función pub/sub de Redis. Activa el escalado en .env.
REVERB_SCALING_ENABLED=true
Reverb usa la conexión Redis por defecto de la aplicación para intercambiar mensajes entre servidores. Arranca varios servidores Reverb y distribuye las solicitudes con un balanceador de carga.
Laravel Cloud ofrece infraestructura WebSocket totalmente gestionada para desplegar aplicaciones compatibles con Reverb sin gestionar la infraestructura.

Eventos

Reverb emite los siguientes eventos durante el ciclo de vida de las conexiones y los mensajes. Puedes recibirlos con listeners de eventos y añadir lógica propia.
EventoDescripción
ChannelCreatedCuando se crea un canal (la primera conexión se suscribe)
ChannelRemovedCuando se elimina un canal (la última conexión se desuscribe)
ConnectionPrunedCuando el servidor desconecta una conexión antigua
MessageReceivedAl recibir un mensaje del cliente
MessageSentAl enviar un mensaje al cliente
Todos estos eventos están en el namespace Laravel\Reverb\Events.

Próximos pasos

Broadcasting

Aprende a crear eventos de broadcast, autorizar canales y configurar Laravel Echo

Eventos y listeners

Descubre el sistema de eventos de Laravel para recibir los que emite Reverb
Última modificación el 13 de julio de 2026