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

> Het officiële serverpakket dat realtime WebSocket-communicatie toevoegt aan je Laravel-applicatie

<Info>
  Deze pagina richt zich op het opzetten en beheren van de Reverb-server zelf.
  Voor het maken van broadcast-events en het gebruik van Laravel Echo, zie [Broadcasting](/nl/broadcasting).
</Info>

## Wat is Reverb

[Laravel Reverb](https://github.com/laravel/reverb) is de officiële, zelf-gehoste WebSocket-server van Laravel.
Hiermee voeg je snelle en schaalbare realtime communicatie toe aan je Laravel-applicatie, zonder afhankelijk te zijn van externe diensten.

Reverb draait bovenop de [broadcasting](/nl/broadcasting)-infrastructuur en zorgt ervoor dat server-side events via WebSockets bij de browser terechtkomen.

```mermaid theme={null}
flowchart LR
    A["Browser<br>Laravel Echo"] -->|"WebSocket-verbinding"| B["Laravel Reverb<br>server"]
    B -->|"Autorisatie en routering"| C["Kanaal-<br>beheer"]
    C -->|"Events afleveren"| A
    D["Laravel-app<br>event afvuren"] -->|"Broadcast<br>(via queue)"| B
```

## Installatie

Met het Artisan-commando `install:broadcasting` installeer je in één keer alle afhankelijkheden, inclusief Reverb.

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

Kies Reverb tijdens het uitvoeren van het commando, of voer het uit met de optie `--reverb` om Reverb automatisch op te zetten.

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

Dit commando doet het volgende:

* Installeren van het Composer-pakket (`laravel/reverb`)
* Installeren van de NPM-pakketten (`laravel-echo`, `pusher-js`)
* Toevoegen van omgevingsvariabelen aan `.env`
* Genereren van `config/reverb.php`

Wil je handmatig installeren, voeg dan het pakket toe via Composer en voer daarna `reverb:install` uit.

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

## Configuratie

### Applicatiecredentials

De credentials waarmee client en server een verbinding opzetten configureer je via omgevingsvariabelen.

```ini theme={null}
REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-secret
```

Deze waarden worden gebruikt in de sectie `apps` van `config/reverb.php`.

### Toegestane origins (allowed origins)

Je kunt de origins waarvan clientrequests worden toegestaan beperken via `allowed_origins` in `config/reverb.php`.

```php theme={null}
'apps' => [
    [
        'app_id' => 'my-app-id',
        'allowed_origins' => ['laravel.com'],
        // ...
    ]
]
```

Wil je alle origins toestaan, geef dan `*` op.

### Meerdere apps ondersteunen

Eén Reverb-server kan meerdere applicaties bedienen.
Voeg meerdere entries toe aan de `apps`-array in `config/reverb.php`.

```php theme={null}
'apps' => [
    [
        'app_id' => 'my-app-one',
        // ...
    ],
    [
        'app_id' => 'my-app-two',
        // ...
    ],
],
```

### SSL-configuratie

In productie is het gebruikelijk dat een webserver zoals Nginx de SSL-terminatie verzorgt en de requests naar Reverb proxyt.
Wil je in je lokale ontwikkelomgeving Secure WebSockets (`wss://`) gebruiken, dan kun je de certificaten van Laravel Herd of Valet benutten.

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

Wil je handmatig een certificaat opgeven, stel dan de optie `tls` in `config/reverb.php` in.

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

## De server starten

Start de server met het Artisan-commando `reverb:start`.

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

Standaard start de server op `0.0.0.0:8080`.
Met de opties `--host` / `--port` geef je een eigen adres op.

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

Dit kan ook via omgevingsvariabelen.

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

<Info>
  `REVERB_SERVER_HOST` / `REVERB_SERVER_PORT` zijn het luisteradres van de server zelf.
  `REVERB_HOST` / `REVERB_PORT` zijn het adres waar je Laravel-app broadcastberichten naartoe stuurt.
  In productie kunnen deze van elkaar verschillen.
</Info>

### Debugmodus

Omwille van de performance geeft Reverb standaard geen debuginformatie weer.
Wil je verbindingen en berichtenstromen bekijken, gebruik dan de optie `--debug`.

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

### De server herstarten

Reverb is een langlopend proces; om codewijzigingen door te voeren is een herstart nodig.
Het commando `reverb:restart` beëindigt eerst alle verbindingen op een nette (graceful) manier en stopt daarna de server.

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

Gebruik je een procesmanager zoals Supervisor, dan wordt de server na het stoppen automatisch opnieuw gestart.

## Monitoring

Reverb ondersteunt integratie met [Laravel Pulse](https://laravel.com/docs/pulse).
Zo kun je het aantal verbindingen en berichten realtime op een dashboard tonen.

Voeg eerst de Reverb-recorders toe aan `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,
    ],

    // ...
],
```

Voeg vervolgens de kaarten toe aan de template van het Pulse-dashboard.

```blade theme={null}
<x-pulse>
    <livewire:reverb.connections cols="full" />
    <livewire:reverb.messages cols="full" />
    ...
</x-pulse>
```

Start op de Reverb-server de `pulse:check`-daemon om de verbindingsstatus correct vast te leggen.
Bij een horizontaal geschaalde opzet voer je `pulse:check` op slechts één server uit.

## Draaien in productie

### Limiet op open bestanden

Elke WebSocket-verbinding verbruikt één file descriptor.
Controleer de limiet op OS-niveau en verhoog deze indien nodig.

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

De limiet pas je aan in `/etc/security/limits.conf`.

```ini theme={null}
# /etc/security/limits.conf
forge        soft  nofile  10000
forge        hard  nofile  10000
```

### Event loop (ext-uv)

Reverb gebruikt standaard PHP's `stream_select`, dat een limiet van maximaal 1.024 bestanden heeft.
Verwerk je meer dan 1.000 gelijktijdige verbindingen, installeer dan `ext-uv` om deze limiet op te heffen.

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

Als `ext-uv` beschikbaar is, gebruikt Reverb deze automatisch.

### Nginx als reverse proxy

Stel Reverb in productie niet rechtstreeks bloot, maar proxy het via een webserver zoals Nginx.
Hieronder een voorbeeldconfiguratie voor 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 accepteert WebSocket-verbindingen op `/app` en API-requests op `/apps`.
  Zorg dat je webserverconfiguratie toegang tot beide URI's toestaat.
</Warning>

Om het aantal gelijktijdige verbindingen te verhogen, pas je `worker_rlimit_nofile` en `worker_connections` in `nginx.conf` aan.

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

### Procesbeheer (Supervisor)

In productie beheer je het Reverb-proces met Supervisor.
Stel `minfds` in `supervisor.conf` in om voldoende file descriptors te reserveren.

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

Een voorbeeldconfiguratie voor 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
```

### Schalen (Redis)

Heb je meer verbindingen nodig dan één server aankan, dan is horizontaal schalen mogelijk via de pub/sub-functionaliteit van Redis.

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

Schakel schalen in via `.env`.

```env theme={null}
REVERB_SCALING_ENABLED=true
```

Reverb gebruikt de standaard Redis-verbinding van je applicatie om berichten tussen servers uit te wisselen.
Start meerdere Reverb-servers en verdeel de requests met een load balancer.

<Info>
  [Laravel Cloud](https://cloud.laravel.com) biedt volledig beheerde WebSocket-infrastructuur waarmee je
  Reverb-apps kunt deployen zonder zelf infrastructuur te beheren.
</Info>

## Events

Reverb verstuurt de volgende events tijdens de levenscyclus van verbindingen en berichten.
Met [event listeners](/nl/events) kun je deze opvangen en er eigen logica aan koppelen.

| Event              | Beschrijving                                                                    |
| ------------------ | ------------------------------------------------------------------------------- |
| `ChannelCreated`   | Wanneer een kanaal wordt aangemaakt (eerste verbinding abonneert zich)          |
| `ChannelRemoved`   | Wanneer een kanaal wordt verwijderd (laatste verbinding zegt het abonnement op) |
| `ConnectionPruned` | Wanneer een verouderde verbinding door de server wordt verbroken                |
| `MessageReceived`  | Wanneer een bericht van een client wordt ontvangen                              |
| `MessageSent`      | Wanneer een bericht naar een client wordt verstuurd                             |

Al deze events horen bij de namespace `Laravel\Reverb\Events`.

## Volgende stappen

<Card title="Broadcasting" href="/nl/broadcasting">
  Bekijk hoe je broadcast-events maakt, kanalen autoriseert en Laravel Echo configureert
</Card>

<Card title="Events en listeners" href="/nl/events">
  Leer het eventsysteem van Laravel kennen om de events van Reverb op te vangen
</Card>


## Related topics

- [Broadcasting](/nl/broadcasting.md)
- [FAQ over de nieuwe appstructuur van Laravel 11+](/nl/advanced/app-structure-faq.md)
- [Deployment](/nl/deployment.md)
- [Laravel Cloud — het complete beeld van de PaaS speciaal voor Laravel](/nl/blog/laravel-cloud.md)
- [Laravel-updates van maart 2026](/nl/blog/changelog/202603.md)
