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

> Das offizielle Server-Paket, das Ihrer Laravel-Anwendung Echtzeit-WebSocket-Kommunikation ermöglicht.

<Info>
  Diese Seite behandelt Setup und Betrieb des Reverb-Servers selbst.
  Für das Anlegen von Broadcasting-Events und die Nutzung von Laravel Echo siehe [Broadcasting](/de/broadcasting).
</Info>

## Was ist Reverb

[Laravel Reverb](https://github.com/laravel/reverb) ist ein von Laravel offiziell bereitgestellter, selbst gehosteter WebSocket-Server.
Ohne Abhängigkeit von externen Diensten fügen Sie Ihrer Anwendung schnelle, skalierbare Echtzeitkommunikation hinzu.

Reverb setzt auf der [Broadcasting](/de/broadcasting)-Infrastruktur auf und liefert serverseitige Events per WebSocket an den Browser.

```mermaid theme={null}
flowchart LR
    A["Browser<br>Laravel Echo"] -->|"WebSocket-Verbindung"| B["Laravel-Reverb-<br>Server"]
    B -->|"Autorisierung / Routing"| C["Channel-<br>Verwaltung"]
    C -->|"Event-Verteilung"| A
    D["Laravel-App<br>Event-Dispatch"] -->|"Broadcast<br>(über Queue)"| B
```

## Installation

Mit dem Artisan-Befehl `install:broadcasting` installieren Sie inklusive Reverb alle nötigen Abhängigkeiten auf einmal.

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

Wählen Sie beim Ausführen Reverb aus – oder verwenden Sie die Option `--reverb`, um Reverb automatisch einzurichten.

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

Der Befehl erledigt:

* Installation des Composer-Pakets (`laravel/reverb`)
* Installation der npm-Pakete (`laravel-echo`, `pusher-js`)
* Ergänzung der Umgebungsvariablen in der `.env`
* Erzeugung von `config/reverb.php`

Für die manuelle Installation fügen Sie das Paket per Composer hinzu und führen anschließend `reverb:install` aus.

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

## Konfiguration

### App-Anmeldedaten

Konfigurieren Sie in Umgebungsvariablen die Anmeldedaten, mit denen Clients und Server ihre Verbindung aufbauen.

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

Diese Werte werden im Abschnitt `apps` von `config/reverb.php` referenziert.

### Zulässige Origins (Allowed Origins)

Über `allowed_origins` in `config/reverb.php` beschränken Sie, welche Origins Clients akzeptieren.

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

Um alle Origins zuzulassen, verwenden Sie `*`.

### Mehrere Anwendungen

Ein Reverb-Server kann mehrere Anwendungen bedienen.
Ergänzen Sie im Array `apps` in `config/reverb.php` mehrere Einträge.

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

### SSL

In Produktion terminiert typischerweise ein Webserver wie Nginx TLS und leitet die Requests an Reverb weiter.
Wollen Sie in der lokalen Entwicklung Secure WebSockets (`wss://`) verwenden, nutzen Sie z. B. die Zertifikate von Laravel Herd oder Valet.

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

Manuelle Zertifikatspfade setzen Sie über die Option `tls` in `config/reverb.php`.

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

## Server starten

Starten Sie den Server mit dem Artisan-Befehl `reverb:start`.

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

Standardmäßig hört Reverb auf `0.0.0.0:8080`.
Adresse und Port können Sie mit `--host` / `--port` anpassen.

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

Auch per Umgebungsvariable möglich:

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

<Info>
  `REVERB_SERVER_HOST` / `REVERB_SERVER_PORT` sind die Listen-Adresse des Servers.
  `REVERB_HOST` / `REVERB_PORT` geben die Adresse an, an die die Laravel-App Broadcast-Nachrichten sendet.
  In Produktion können sich beide unterscheiden.
</Info>

### Debug-Modus

Aus Performance-Gründen gibt Reverb standardmäßig keine Debug-Informationen aus.
Um Verbindungen und Nachrichtenflüsse zu verfolgen, verwenden Sie `--debug`.

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

### Server neu starten

Da Reverb ein Daemon ist, müssen Sie ihn nach Codeänderungen neu starten.
`reverb:restart` beendet alle Verbindungen sauber und stoppt den Server anschließend.

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

Wenn Sie einen Prozessmanager wie Supervisor verwenden, startet er sich automatisch neu.

## Monitoring

Reverb unterstützt die Integration mit [Laravel Pulse](https://laravel.com/docs/pulse).
So sehen Sie Verbindungs- und Nachrichtenzahlen in Echtzeit im Dashboard.

Fügen Sie zunächst in `config/pulse.php` die Reverb-Recorders hinzu.

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

    // ...
],
```

Und dann Cards ins Pulse-Dashboard einbinden:

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

Damit Verbindungen korrekt erfasst werden, muss der Daemon `pulse:check` auf dem Reverb-Server laufen.
In horizontal skalierten Setups sollten Sie `pulse:check` auf genau einem Server ausführen.

## Produktivbetrieb

### File-Open-Limit

Jede WebSocket-Verbindung belegt einen Filedescriptor. Prüfen Sie das OS-Limit und heben Sie es bei Bedarf an.

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

Anpassen in `/etc/security/limits.conf`:

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

### Event-Loop (ext-uv)

Standardmäßig verwendet Reverb PHPs `stream_select`, das jedoch auf 1024 Dateien begrenzt ist.
Für mehr als 1000 gleichzeitige Verbindungen installieren Sie `ext-uv`, um dieses Limit aufzuheben.

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

Wenn `ext-uv` verfügbar ist, verwendet Reverb es automatisch.

### Nginx als Reverse-Proxy

Stellen Sie Reverb in Produktion nicht direkt bereit, sondern hinter einem Webserver wie Nginx. Beispielkonfiguration:

```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 nimmt WebSocket-Verbindungen unter `/app` und API-Anfragen unter `/apps` entgegen.
  Erlauben Sie in der Webserver-Konfiguration den Zugriff auf beide URIs.
</Warning>

Um mehr gleichzeitige Verbindungen zu ermöglichen, passen Sie in der `nginx.conf` `worker_rlimit_nofile` und `worker_connections` an.

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

### Prozessverwaltung (Supervisor)

In Produktion verwalten Sie den Reverb-Prozess mit Supervisor.
Setzen Sie `minfds` in der `supervisor.conf`, damit ausreichend Filedescriptoren zur Verfügung stehen.

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

Beispielkonfiguration für 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
```

### Skalierung (Redis)

Wenn ein einzelner Server nicht mehr genügt, ermöglicht Redis Pub/Sub horizontale Skalierung.

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

Aktivieren Sie die Skalierung in der `.env`:

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

Reverb tauscht mit der Standard-Redis-Verbindung Nachrichten zwischen Servern aus.
Starten Sie mehrere Reverb-Server und verteilen Sie die Requests über einen Load Balancer.

<Info>
  [Laravel Cloud](https://cloud.laravel.com) bietet vollständig verwaltete WebSocket-Infrastruktur, mit der Sie Reverb-Anwendungen ohne eigene Infrastrukturverwaltung deployen.
</Info>

## Events

Reverb feuert im Lebenszyklus von Verbindungen und Nachrichten folgende Events. Sie können sie mit [Event-Listenern](/de/events) verarbeiten.

| Event              | Beschreibung                                                  |
| ------------------ | ------------------------------------------------------------- |
| `ChannelCreated`   | Wenn ein Channel angelegt wird (erstes Abonnement)            |
| `ChannelRemoved`   | Wenn ein Channel entfernt wird (letztes Abonnement gekündigt) |
| `ConnectionPruned` | Wenn der Server eine alte Verbindung schließt                 |
| `MessageReceived`  | Wenn eine Nachricht vom Client empfangen wird                 |
| `MessageSent`      | Wenn eine Nachricht an den Client gesendet wird               |

Alle Events liegen im Namespace `Laravel\Reverb\Events`.

## Nächste Schritte

<Card title="Broadcasting" href="/de/broadcasting">
  Erstellen von Broadcast-Events, Channel-Autorisierung und die Konfiguration von Laravel Echo
</Card>

<Card title="Events und Listener" href="/de/events">
  So verarbeiten Sie die Events, die Reverb feuert, im Laravel-Eventsystem
</Card>


## Related topics

- [Broadcasting](/de/broadcasting.md)
- [FAQ zur neuen App-Struktur ab Laravel 11](/de/advanced/app-structure-faq.md)
- [Deployment](/de/deployment.md)
- [Laravel Cloud – Der Gesamtüberblick zum Laravel-eigenen PaaS](/de/blog/laravel-cloud.md)
- [Laravel-Updates März 2026](/de/blog/changelog/202603.md)
