> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel Reverb

> Paquete oficial de servidor WebSocket para ofrecer comunicación en tiempo real en aplicaciones Laravel

<Info>
  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](/es/broadcasting).
</Info>

## ¿Qué es Reverb?

[Laravel Reverb](https://github.com/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](/es/broadcasting) y se encarga de entregar eventos del servidor al navegador a través de WebSocket.

```mermaid theme={null}
flowchart LR
    A["Navegador<br>Laravel Echo"] -->|"Conexión WebSocket"| B["Servidor<br>Laravel Reverb"]
    B -->|"Autorización y enrutamiento"| C["Gestión de<br>canales"]
    C -->|"Distribución de eventos"| A
    D["Aplicación Laravel<br>Emisión de eventos"] -->|"Broadcast<br>(vía cola)"| B
```

## Instalación

Con el comando Artisan `install:broadcasting` puedes instalar de golpe todas las dependencias, incluida Reverb.

```shell theme={null}
php artisan install:broadcasting
```

Elige Reverb durante el proceso o pasa la opción `--reverb` para configurarlo automáticamente.

```shell theme={null}
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`.

```shell theme={null}
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.

```ini theme={null}
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`.

```php theme={null}
'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`.

```php theme={null}
'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.

```shell theme={null}
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`.

```php theme={null}
'options' => [
    'tls' => [
        'local_cert' => '/path/to/cert.pem'
    ],
],
```

## Arrancar el servidor

Arranca el servidor con el comando Artisan `reverb:start`.

```shell theme={null}
php artisan reverb:start
```

Por defecto escucha en `0.0.0.0:8080`.
Puedes indicar una dirección personalizada con las opciones `--host` / `--port`.

```shell theme={null}
php artisan reverb:start --host=127.0.0.1 --port=9000
```

También puedes configurarlo mediante variables de entorno.

```ini theme={null}
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080
```

<Info>
  `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.
</Info>

### 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`.

```shell theme={null}
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.

```shell theme={null}
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](https://laravel.com/docs/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`.

```php theme={null}
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.

```blade theme={null}
<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.

```shell theme={null}
ulimit -n
```

Puedes cambiar el límite en `/etc/security/limits.conf`.

```ini theme={null}
# /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.

```shell theme={null}
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:

```nginx theme={null}
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;
    }

    ...
}
```

<Warning>
  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.
</Warning>

Para aumentar el número de conexiones concurrentes, ajusta `worker_rlimit_nofile` y `worker_connections` en `nginx.conf`.

```nginx theme={null}
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.

```ini theme={null}
[supervisord]
...
minfds=10000
```

Ejemplo de configuración de Supervisor:

```ini theme={null}
[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.

```mermaid theme={null}
flowchart TB
    LB["Balanceador de carga"] --> R1["Servidor Reverb 1"]
    LB --> R2["Servidor Reverb 2"]
    LB --> R3["Servidor Reverb 3"]
    R1 <-->|"pub/sub"| Redis["Redis"]
    R2 <-->|"pub/sub"| Redis
    R3 <-->|"pub/sub"| Redis
```

Activa el escalado en `.env`.

```env theme={null}
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.

<Info>
  [Laravel Cloud](https://cloud.laravel.com) ofrece infraestructura WebSocket totalmente gestionada para desplegar aplicaciones compatibles con Reverb sin gestionar la infraestructura.
</Info>

## Eventos

Reverb emite los siguientes eventos durante el ciclo de vida de las conexiones y los mensajes.
Puedes recibirlos con [listeners de eventos](/es/events) y añadir lógica propia.

| Evento             | Descripción                                                   |
| ------------------ | ------------------------------------------------------------- |
| `ChannelCreated`   | Cuando se crea un canal (la primera conexión se suscribe)     |
| `ChannelRemoved`   | Cuando se elimina un canal (la última conexión se desuscribe) |
| `ConnectionPruned` | Cuando el servidor desconecta una conexión antigua            |
| `MessageReceived`  | Al recibir un mensaje del cliente                             |
| `MessageSent`      | Al enviar un mensaje al cliente                               |

Todos estos eventos están en el namespace `Laravel\Reverb\Events`.

## Próximos pasos

<Card title="Broadcasting" href="/es/broadcasting">
  Aprende a crear eventos de broadcast, autorizar canales y configurar Laravel Echo
</Card>

<Card title="Eventos y listeners" href="/es/events">
  Descubre el sistema de eventos de Laravel para recibir los que emite Reverb
</Card>


## Related topics

- [Broadcasting](/es/broadcasting.md)
- [FAQ de la nueva estructura de aplicación de Laravel 11 y posteriores](/es/advanced/app-structure-faq.md)
- [Despliegue](/es/deployment.md)
- [Laravel Cloud — Todo sobre el PaaS específico para Laravel](/es/blog/laravel-cloud.md)
- [Actualización de Laravel — Marzo de 2026](/es/blog/changelog/202603.md)
