Estamos actualizando el sitio. Durante unos días es posible que veas fallos de diseño o de traducción. La documentación sigue disponible: si una página se ve mal, recárgala más tarde.

Inicio Laravel 10.x Laravel Reverb

Laravel Reverb

10.x 7 de mar. de 2026

#Introducción

Laravel Reverb ofrece comunicación WebSocket en tiempo real, rápida y escalable, directamente para su aplicación Laravel, y proporciona integración fluida con la suite existente de herramientas de broadcasting de eventos de Laravel.

#Instalación

Внимание

Laravel Reverb requiere PHP 8.2+ y Laravel 10.47+.

Puede usar el gestor de paquetes Composer para instalar Reverb en su proyecto Laravel:

composer require laravel/reverb

Una vez instalado el paquete, puede ejecutar el comando de instalación de Reverb para publicar la configuración, agregar las variables de entorno requeridas por Reverb y habilitar el broadcasting de eventos en su aplicación:

php artisan reverb:install

#Configuración

El comando reverb:install configurará automáticamente Reverb usando un conjunto sensato de opciones predeterminadas. Si desea realizar algún cambio en la configuración, puede hacerlo actualizando las variables de entorno de Reverb o modificando el archivo de configuración config/reverb.php.

#Credenciales de la aplicación

Para establecer una conexión con Reverb, debe intercambiarse un conjunto de credenciales de "aplicación" de Reverb entre el cliente y el servidor. Estas credenciales se configuran en el servidor y se usan para verificar la solicitud del cliente. Puede definir estas credenciales usando las siguientes variables de entorno:

REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-secret

#Orígenes permitidos

También puede definir los orígenes desde los cuales pueden originarse las solicitudes de los clientes actualizando el valor de allowed_origins dentro de la sección apps del archivo de configuración config/reverb.php. Cualquier solicitud desde un origen no listado en sus orígenes permitidos será rechazada. Puede permitir todos los orígenes usando *:

'apps' => [
    [
        'id' => 'my-app-id',
        'allowed_origins' => ['laravel.com'],
        // ...
    ]
]

#Aplicaciones adicionales

Normalmente, Reverb proporciona un servidor WebSocket para la aplicación en la que está instalado. Sin embargo, es posible servir más de una aplicación usando una sola instalación de Reverb.

Por ejemplo, puede que desee mantener una única aplicación Laravel que, a través de Reverb, proporcione conectividad WebSocket para múltiples aplicaciones. Esto se puede lograr definiendo múltiples apps en el archivo de configuración config/reverb.php de su aplicación:

'apps' => [
    [
        'app_id' => 'my-app-one',
        // ...
    ],
    [
        'app_id' => 'my-app-two',
        // ...
    ],
],

#SSL

En la mayoría de los casos, las conexiones WebSocket seguras son manejadas por un servidor web upstream (Nginx, etc.) antes de que la solicitud sea proxyada a su servidor Reverb.

Sin embargo, a veces puede ser útil, por ejemplo durante el desarrollo local, que el servidor Reverb maneje directamente las conexiones seguras. Si está usando la funcionalidad de sitio seguro de Laravel Herd, o está usando Laravel Valet y ha ejecutado el comando secure contra su aplicación, puede usar el certificado generado por Herd / Valet para asegurar sus conexiones Reverb. Para ello, configure la variable de entorno REVERB_HOST con el nombre de host de su sitio o pase explícitamente la opción hostname al iniciar el servidor Reverb:

php artisan reverb:start --host="0.0.0.0" --port=8080 --hostname="laravel.test"

Dado que los dominios Herd y Valet resuelven a localhost, ejecutar el comando anterior hará que su servidor Reverb sea accesible mediante el protocolo WebSocket seguro (wss) en wss://laravel.test:8080.

También puede elegir manualmente un certificado definiendo opciones tls en el archivo de configuración config/reverb.php de su aplicación. Dentro del array de opciones tls, puede proporcionar cualquiera de las opciones soportadas por las opciones de contexto SSL de PHP:

'options' => [
    'tls' => [
        'local_cert' => '/path/to/cert.pem'
    ],
],

#Ejecutando el servidor

El servidor Reverb puede iniciarse usando el comando Artisan reverb:start:

php artisan reverb:start

Por defecto, el servidor Reverb se iniciará en 0.0.0.0:8080, haciéndolo accesible desde todas las interfaces de red.

Si necesita especificar un host o puerto personalizado, puede hacerlo mediante las opciones --host y --port al iniciar el servidor:

php artisan reverb:start --host=127.0.0.1 --port=9000

Alternativamente, puede definir las variables de entorno REVERB_SERVER_HOST y REVERB_SERVER_PORT en el archivo .env de su aplicación.

Las variables de entorno REVERB_SERVER_HOST y REVERB_SERVER_PORT no deben confundirse con REVERB_HOST y REVERB_PORT. Las primeras especifican el host y puerto en los que se ejecuta el servidor Reverb, mientras que las segundas indican a Laravel dónde enviar los mensajes broadcast. Por ejemplo, en un entorno de producción, puede enrutar solicitudes desde su hostname público de Reverb en el puerto 443 a un servidor Reverb que opera en 0.0.0.0:8080. En este escenario, sus variables de entorno se definirían así:

REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080

REVERB_HOST=ws.laravel.com
REVERB_PORT=443

#Depuración

Para mejorar el rendimiento, Reverb no muestra información de depuración por defecto. Si desea ver el flujo de datos que pasa por su servidor Reverb, puede usar la opción --debug con el comando reverb:start:

php artisan reverb:start --debug

#Reinicio

Dado que Reverb es un proceso de larga duración, los cambios en su código no se reflejarán sin reiniciar el servidor mediante el comando Artisan reverb:restart.

El comando reverb:restart asegura que todas las conexiones se terminen de forma ordenada antes de detener el servidor. Si está ejecutando Reverb con un gestor de procesos como Supervisor, el servidor será reiniciado automáticamente por el gestor después de que todas las conexiones hayan sido terminadas:

php artisan reverb:restart

#Ejecutando Reverb en producción

Debido a la naturaleza de larga duración de los servidores WebSocket, puede que necesite hacer algunas optimizaciones en su servidor y entorno de hosting para asegurar que su servidor Reverb pueda manejar efectivamente el número óptimo de conexiones según los recursos disponibles.

Примечание

Si su sitio está gestionado por Laravel Forge, puede optimizar automáticamente su servidor para Reverb directamente desde el panel "Application". Al habilitar la integración de Reverb, Forge asegurará que su servidor esté listo para producción, incluyendo la instalación de extensiones necesarias y el aumento del número permitido de conexiones.

#Archivos abiertos

Cada conexión WebSocket se mantiene en memoria hasta que el cliente o el servidor se desconectan. En entornos Unix y similares, cada conexión se representa como un archivo. Sin embargo, a menudo existen límites en el número de archivos abiertos permitidos tanto a nivel del sistema operativo como de la aplicación.

#Sistema operativo

En un sistema operativo basado en Unix, puede determinar el número permitido de archivos abiertos usando el comando ulimit:

ulimit -n

Este comando mostrará los límites de archivos abiertos permitidos para diferentes usuarios. Puede actualizar estos valores editando el archivo /etc/security/limits.conf. Por ejemplo, actualizar el número máximo de archivos abiertos a 10,000 para el usuario forge se vería así:

# /etc/security/limits.conf
forge        soft  nofile  10000
forge        hard  nofile  10000

#Bucle de eventos

Internamente, Reverb usa un bucle de eventos ReactPHP para gestionar las conexiones WebSocket en el servidor. Por defecto, este bucle usa stream_select, que no requiere extensiones adicionales. Sin embargo, stream_select está típicamente limitado a 1,024 archivos abiertos. Por lo tanto, si planea manejar más de 1,000 conexiones concurrentes, necesitará usar un bucle de eventos alternativo que no tenga estas restricciones.

Reverb cambiará automáticamente a un bucle potenciado por ext-event, ext-ev o ext-uv cuando estén disponibles. Todas estas extensiones PHP pueden instalarse vía PECL:

pecl install event
# o
pecl install ev
# o
pecl install uv

#Servidor web

En la mayoría de los casos, Reverb se ejecuta en un puerto no expuesto directamente en su servidor. Por lo tanto, para enrutar el tráfico hacia Reverb, debe configurar un proxy inverso. Suponiendo que Reverb se ejecuta en el host 0.0.0.0 y puerto 8080 y que su servidor utiliza Nginx, un proxy inverso puede definirse para su servidor Reverb usando la siguiente configuración de sitio 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;
    }

    ...
}

Normalmente, los servidores web están configurados para limitar el número de conexiones permitidas para evitar sobrecargar el servidor. Para aumentar el número de conexiones permitidas en un servidor Nginx a 10,000, los valores worker_rlimit_nofile y worker_connections del archivo nginx.conf deben actualizarse:

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;
}

La configuración anterior permitirá que se generen hasta 10,000 workers de Nginx por proceso. Además, esta configuración establece el límite de archivos abiertos de Nginx a 10,000.

#Puertos

Los sistemas operativos basados en Unix típicamente limitan el número de puertos que pueden abrirse en el servidor. Puede ver el rango permitido actual con el siguiente comando:

cat /proc/sys/net/ipv4/ip_local_port_range

# 32768	60999

The output above shows the server can handle a maximum of 28,231 (60,999 - 32,768) connections since each connection requires a free port. Although we recommend horizontal scaling to increase the number of allowed connections, you may increase the number of available open ports by updating the allowed port range in your server's /etc/sysctl.conf configuration file.

#Process Management

In most cases, you should use a process manager such as Supervisor to ensure the Reverb server is continually running. If you are using Supervisor to run Reverb, you should update the minfds setting of your server's supervisor.conf file to ensure Supervisor is able to open the files required to handle connections to your Reverb server:

[supervisord]
...
minfds=10000

#Escalabilidad

Si necesita manejar más conexiones de las que un solo servidor permite, puede escalar su servidor Reverb horizontalmente. Utilizando las capacidades de publish / subscribe de Redis, Reverb puede gestionar conexiones a través de múltiples servidores. Cuando uno de los servidores Reverb de su aplicación recibe un mensaje, usará Redis para publicar el mensaje entrante a todos los demás servidores.

Para habilitar la escalabilidad horizontal, debe establecer la variable de entorno REVERB_SCALING_ENABLED en true en el archivo .env de su aplicación:

REVERB_SCALING_ENABLED=true

Luego, debe contar con un servidor Redis central y dedicado con el que todos los servidores Reverb se comuniquen. Reverb usará la conexión Redis predeterminada configurada para su aplicación para publicar mensajes a todos sus servidores Reverb.

Una vez que haya habilitado la opción de escalabilidad de Reverb y configurado un servidor Redis, simplemente puede invocar el comando reverb:start en múltiples servidores que puedan comunicarse con su servidor Redis. Estos servidores Reverb deben estar detrás de un balanceador de carga que distribuya las solicitudes entrantes de manera uniforme entre ellos.