Passer au contenu principal
Cette page couvre la mise en place et l’exploitation de Reverb. Pour la création d’événements de broadcast et l’utilisation de Laravel Echo, consultez Broadcasting.

Qu’est-ce que Reverb

Laravel Reverb est le serveur WebSocket self-hosted officiel de Laravel. Ajoutez du temps réel rapide et scalable à votre application sans dépendance à un service externe. Reverb repose sur l’infrastructure de broadcasting et transporte les événements serveur vers le navigateur via WebSocket.

Installation

install:broadcasting installe Reverb et toutes ses dépendances en une commande.
php artisan install:broadcasting
Sélectionnez Reverb pendant l’exécution, ou passez --reverb.
php artisan install:broadcasting --reverb
Cette commande :
  • installe le package Composer laravel/reverb
  • installe les packages NPM laravel-echo, pusher-js
  • ajoute les variables d’environnement dans .env
  • génère config/reverb.php
Installation manuelle :
composer require laravel/reverb
php artisan reverb:install

Configuration

Identifiants d’application

Définis via variables d’environnement.
REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-secret
Ces valeurs sont lues dans la section apps de config/reverb.php.

Origines autorisées

Limitez les origines client dans allowed_origins.
'apps' => [
    [
        'app_id' => 'my-app-id',
        'allowed_origins' => ['laravel.com'],
        // ...
    ]
]
* pour tout autoriser.

Support multi-applications

Un même serveur Reverb peut servir plusieurs applications.
'apps' => [
    [
        'app_id' => 'my-app-one',
        // ...
    ],
    [
        'app_id' => 'my-app-two',
        // ...
    ],
],

SSL

En production, un serveur web (Nginx) termine généralement le SSL et proxie vers Reverb. En local, utilisez les certificats Laravel Herd ou Valet pour du WSS.
php artisan reverb:start --host="0.0.0.0" --port=8080 --hostname="laravel.test"
Certificat manuel via tls dans config/reverb.php.
'options' => [
    'tls' => [
        'local_cert' => '/path/to/cert.pem'
    ],
],

Démarrer le serveur

php artisan reverb:start
Écoute par défaut sur 0.0.0.0:8080. Personnalisez avec --host / --port.
php artisan reverb:start --host=127.0.0.1 --port=9000
Ou via variables :
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080
REVERB_SERVER_HOST / REVERB_SERVER_PORT : adresse d’écoute du serveur. REVERB_HOST / REVERB_PORT : adresse à laquelle l’application envoie les messages de broadcast. Elles peuvent différer en production.

Mode debug

Par défaut, Reverb ne loggue pas pour la performance. Pour voir connexions et messages, utilisez --debug.
php artisan reverb:start --debug

Redémarrage

Reverb est un process long-running : un redémarrage est nécessaire à chaque modification. reverb:restart termine les connexions proprement puis arrête le serveur.
php artisan reverb:restart
Un superviseur (Supervisor…) relance ensuite le process.

Supervision

Reverb s’intègre à Laravel Pulse pour afficher nombre de connexions et de messages en temps réel. Ajoutez les recorders Reverb à 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,
    ],

    // ...
],
Ajoutez les cartes à la vue Pulse.
<x-pulse>
    <livewire:reverb.connections cols="full" />
    <livewire:reverb.messages cols="full" />
    ...
</x-pulse>
Pour enregistrer les connexions, lancez pulse:check sur le serveur Reverb. En scaling horizontal, pulse:check ne s’exécute que sur un seul serveur.

Exploitation en production

Limites de fichiers ouverts

Chaque connexion WebSocket consomme un file descriptor. Vérifiez et augmentez la limite OS.
ulimit -n
Dans /etc/security/limits.conf :
# /etc/security/limits.conf
forge        soft  nofile  10000
forge        hard  nofile  10000

Boucle d’événements (ext-uv)

Par défaut, Reverb utilise stream_select (limité à 1 024 fichiers). Au-delà de 1 000 connexions simultanées, installez ext-uv.
pecl install uv
Reverb l’utilise automatiquement si disponible.

Proxy Nginx

En production, proxifiez via 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 accepte les WebSocket sur /app et les requêtes API sur /apps. Autorisez les deux dans votre config serveur.
Ajustez worker_rlimit_nofile et worker_connections dans 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;
}

Gestion des processus (Supervisor)

En production, gérez Reverb via Supervisor. minfds fournit les file descriptors nécessaires.
[supervisord]
...
minfds=10000
Exemple :
[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

Scaling avec Redis

Pour dépasser un seul serveur, activez le pub/sub Redis. Activation via .env :
REVERB_SCALING_ENABLED=true
Reverb utilise la connexion Redis par défaut pour échanger les messages entre serveurs. Lancez plusieurs instances et répartissez via un load balancer.
Laravel Cloud fournit une infrastructure WebSocket entièrement managée pour Reverb.

Événements

Reverb émet des événements de cycle de vie des connexions/messages ; écoutez-les via les listeners.
ÉvénementDescription
ChannelCreatedCréation de canal (première souscription)
ChannelRemovedSuppression de canal (dernier désabonnement)
ConnectionPrunedAncienne connexion déconnectée par le serveur
MessageReceivedMessage reçu d’un client
MessageSentMessage envoyé à un client
Tous dans le namespace Laravel\Reverb\Events.

Prochaines étapes

Broadcasting

Création d’événements de broadcast, autorisation de canaux, Laravel Echo.

Événements et listeners

Utilisez le système d’événements Laravel pour réagir aux événements Reverb.
Dernière modification le 13 juillet 2026