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

> Serveur WebSocket officiel qui apporte des communications temps réel à votre application Laravel.

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

## Qu'est-ce que Reverb

[Laravel Reverb](https://github.com/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](/fr/broadcasting) et transporte les événements serveur vers le navigateur via WebSocket.

```mermaid theme={null}
flowchart LR
    A["Navigateur<br>Laravel Echo"] -->|"Connexion WebSocket"| B["Serveur Laravel Reverb"]
    B -->|"Autorisation / routage"| C["Gestion<br>des canaux"]
    C -->|"Diffusion"| A
    D["Application Laravel<br>émet un événement"] -->|"Broadcast<br>(via queue)"| B
```

## Installation

`install:broadcasting` installe Reverb et toutes ses dépendances en une commande.

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

Sélectionnez Reverb pendant l'exécution, ou passez `--reverb`.

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

```shell theme={null}
composer require laravel/reverb
php artisan reverb:install
```

## Configuration

### Identifiants d'application

Définis via variables d'environnement.

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

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

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

```shell theme={null}
php artisan reverb:start --host="0.0.0.0" --port=8080 --hostname="laravel.test"
```

Certificat manuel via `tls` dans `config/reverb.php`.

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

## Démarrer le serveur

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

Écoute par défaut sur `0.0.0.0:8080`. Personnalisez avec `--host` / `--port`.

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

Ou via variables :

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

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

### Mode debug

Par défaut, Reverb ne loggue pas pour la performance.
Pour voir connexions et messages, utilisez `--debug`.

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

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

Un superviseur (Supervisor…) relance ensuite le process.

## Supervision

Reverb s'intègre à [Laravel Pulse](https://laravel.com/docs/pulse) pour afficher nombre de connexions et de messages en temps réel.

Ajoutez les recorders Reverb à `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,
    ],

    // ...
],
```

Ajoutez les cartes à la vue Pulse.

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

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

Dans `/etc/security/limits.conf` :

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

```shell theme={null}
pecl install uv
```

Reverb l'utilise automatiquement si disponible.

### Proxy Nginx

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

Ajustez `worker_rlimit_nofile` et `worker_connections` dans `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;
}
```

### Gestion des processus (Supervisor)

En production, gérez Reverb via Supervisor. `minfds` fournit les file descriptors nécessaires.

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

Exemple :

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

### Scaling avec Redis

Pour dépasser un seul serveur, activez le pub/sub Redis.

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

Activation via `.env` :

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

<Info>
  [Laravel Cloud](https://cloud.laravel.com) fournit une infrastructure WebSocket entièrement managée pour Reverb.
</Info>

## Événements

Reverb émet des événements de cycle de vie des connexions/messages ; écoutez-les via [les listeners](/fr/events).

| Événement          | Description                                   |
| ------------------ | --------------------------------------------- |
| `ChannelCreated`   | Création de canal (première souscription)     |
| `ChannelRemoved`   | Suppression de canal (dernier désabonnement)  |
| `ConnectionPruned` | Ancienne connexion déconnectée par le serveur |
| `MessageReceived`  | Message reçu d'un client                      |
| `MessageSent`      | Message envoyé à un client                    |

Tous dans le namespace `Laravel\Reverb\Events`.

## Prochaines étapes

<Card title="Broadcasting" href="/fr/broadcasting">
  Création d'événements de broadcast, autorisation de canaux, Laravel Echo.
</Card>

<Card title="Événements et listeners" href="/fr/events">
  Utilisez le système d'événements Laravel pour réagir aux événements Reverb.
</Card>


## Related topics

- [Broadcasting](/fr/broadcasting.md)
- [FAQ sur la nouvelle structure d'application Laravel 11+](/fr/advanced/app-structure-faq.md)
- [Déploiement](/fr/deployment.md)
- [Laravel Cloud — le PaaS dédié à Laravel](/fr/blog/laravel-cloud.md)
- [Mises à jour Laravel — mars 2026](/fr/blog/changelog/202603.md)
