Zum Hauptinhalt springen
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.

Was ist Reverb

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-Infrastruktur auf und liefert serverseitige Events per WebSocket an den Browser.

Installation

Mit dem Artisan-Befehl install:broadcasting installieren Sie inklusive Reverb alle nötigen Abhängigkeiten auf einmal.
php artisan install:broadcasting
Wählen Sie beim Ausführen Reverb aus – oder verwenden Sie die Option --reverb, um Reverb automatisch einzurichten.
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.
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.
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.
'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.
'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.
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.
'options' => [
    'tls' => [
        'local_cert' => '/path/to/cert.pem'
    ],
],

Server starten

Starten Sie den Server mit dem Artisan-Befehl reverb:start.
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.
php artisan reverb:start --host=127.0.0.1 --port=9000
Auch per Umgebungsvariable möglich:
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080
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.

Debug-Modus

Aus Performance-Gründen gibt Reverb standardmäßig keine Debug-Informationen aus. Um Verbindungen und Nachrichtenflüsse zu verfolgen, verwenden Sie --debug.
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.
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. So sehen Sie Verbindungs- und Nachrichtenzahlen in Echtzeit im Dashboard. Fügen Sie zunächst in config/pulse.php die Reverb-Recorders hinzu.
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:
<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.
ulimit -n
Anpassen in /etc/security/limits.conf:
# /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.
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:
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 nimmt WebSocket-Verbindungen unter /app und API-Anfragen unter /apps entgegen. Erlauben Sie in der Webserver-Konfiguration den Zugriff auf beide URIs.
Um mehr gleichzeitige Verbindungen zu ermöglichen, passen Sie in der nginx.conf worker_rlimit_nofile und worker_connections an.
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.
[supervisord]
...
minfds=10000
Beispielkonfiguration für Supervisor:
[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. Aktivieren Sie die Skalierung in der .env:
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.
Laravel Cloud bietet vollständig verwaltete WebSocket-Infrastruktur, mit der Sie Reverb-Anwendungen ohne eigene Infrastrukturverwaltung deployen.

Events

Reverb feuert im Lebenszyklus von Verbindungen und Nachrichten folgende Events. Sie können sie mit Event-Listenern verarbeiten.
EventBeschreibung
ChannelCreatedWenn ein Channel angelegt wird (erstes Abonnement)
ChannelRemovedWenn ein Channel entfernt wird (letztes Abonnement gekündigt)
ConnectionPrunedWenn der Server eine alte Verbindung schließt
MessageReceivedWenn eine Nachricht vom Client empfangen wird
MessageSentWenn eine Nachricht an den Client gesendet wird
Alle Events liegen im Namespace Laravel\Reverb\Events.

Nächste Schritte

Broadcasting

Erstellen von Broadcast-Events, Channel-Autorisierung und die Konfiguration von Laravel Echo

Events und Listener

So verarbeiten Sie die Events, die Reverb feuert, im Laravel-Eventsystem
Zuletzt geändert am 13. Juli 2026