Entwicklung und Datenbanken
WebSockets in Laravel: Reverb, Pusher und Alternativen
Mit dem Broadcasting von Laravel benachrichtigt der Server den Browser in dem Moment, in dem etwas passiert: eine Benachrichtigung, eine Chatnachricht, eine Bestellung, deren Status sich ändert. Im Browser hört Laravel Echo zu; dazwischen braucht es einen WebSocket-Server, der die Verbindung zu jedem Besucher offen hält. Dieser Server kann Reverb sein, wenn Sie ihn selbst hosten, oder ein mit dem Pusher-Protokoll kompatibler Dienst, den Laravel von Haus aus unterstützt.
Auf dem Hosting verwenden wir die zweite Option: Ihre Anwendung bleibt hier, und die Verbindungen der Browser übernimmt der externe Dienst.
Warum wir Reverb auf dem Hosting nicht anbieten
Reverb ist ein Server, der dauerhaft läuft und die Verbindungen der Browser auf einem eigenen Port entgegennimmt. Die dauerhaften Prozesse des Hostings sind für Queues und andere Hintergrundaufgaben gedacht, und Programme, die auf einem Port lauschen, unterstützen wir nicht. Deshalb bieten wir weder Reverb noch Soketi oder andere eigene WebSocket-Server an.
So funktioniert es mit einem externen Dienst
Laravel en el hosting --HTTPS--> servicio de WebSockets <--WSS-- navegador con Echo
Wenn Ihre Anwendung ein Event auslöst, sendet PHP eine HTTPS-Anfrage an den Dienst. Der Dienst verteilt es an die mit dem Kanal verbundenen Browser. Die Browser verbinden sich direkt mit dem Dienst, nicht mit dem Hosting, und verbrauchen daher weder Prozesse noch Verbindungen Ihres Kontos.
Vergleich
Preise und Limits geprüft am 11. Oktober 2026. Sie ändern sich häufig: Bestätigen Sie sie vor der Entscheidung auf der Website des jeweiligen Dienstes.
Am stärksten ins Gewicht fällt die Zahl der gleichzeitigen Verbindungen: Jeder Tab oder Bildschirm mit offenem Echo belegt eine. Nachrichten werden pro Zustellung gezählt: Ein Event, das 150 Bildschirme empfangen, verbraucht 151 Nachrichten.
Ably (empfohlen)
- Kostenlos: 200 gleichzeitige Verbindungen und 6 Millionen Nachrichten pro Monat.
- Kostenpflichtig: ab 29 $/Monat zuzüglich Nutzung, mit bis zu 10.000 Verbindungen.
- Europa: Daten nur in der EU zu speichern, ist eine Option des Enterprise-Tarifs.
- In Laravel: in Laravel enthaltener Treiber
ablyoder der offizielle Broadcaster ably/laravel-broadcaster. Im Browser Echo mit dem Adapter für das Pusher-Protokoll.
Es ist der umfangreichste kostenlose Tarif eines ausgereiften Dienstes: Mit 200 Verbindungen passt zum Beispiel ein Betrieb mit gut hundert Bildschirmen hinein.
Pusher Channels
- Kostenlos: 100 gleichzeitige Verbindungen und 200.000 Nachrichten pro Tag.
- Kostenpflichtig: ab 49 $/Monat, mit 500 Verbindungen und 1 Million Nachrichten pro Tag.
- Europa: Cluster
eu, in Irland. - In Laravel: Treiber
pusher, mitphp artisan install:broadcasting --pusher.
Es ist der direkteste Weg, den auch die Laravel-Dokumentation verwendet, und er reicht, wenn Sie nicht mehr als 100 gleichzeitige Verbindungen haben.
Weitere Pusher-kompatible Optionen
PieSocket (kostenlos bis 200 Verbindungen) und Vask (ab 10 $/Monat für 500 Verbindungen) sprechen das Pusher-Protokoll und werden daher wie Pusher konfiguriert, nur mit anderem Host. Es sind jüngere Dienste, die nicht angeben, wo sie die Daten speichern: Testen Sie sie, bevor Sie sie in Produktion einsetzen.
Was Ihr Konto braucht
- Ausgehende HTTPS-Anfragen aus PHP, die das Hosting erlaubt. Sie müssen weder Ports öffnen noch etwas auf dem Server installieren.
- Node.js, um Echo mit Vite zu bauen, über den Paketmanager. Deploy+ installiert es, wenn Ihr Skript es verwendet.
- Einen Queue-Worker, wenn Ihre Events
ShouldBroadcastimplementieren: Laravel sendet sie aus der Queue, und ohne laufenden Worker kommen sie verspätet oder gar nicht an. In Avanza, Max und Elastic legen Sie einen Queue-Worker unter dauerhafte Prozesse an. In Inicia und Webmaster implementieren SieShouldBroadcastNow: Das Event wird in derselben Anfrage ohne Queue gesendet, dafür wartet diese Anfrage auf die Antwort des Dienstes. Eine Queue, die der Scheduler jede Minute abarbeitet, taugt nicht für Echtzeit.
Für das Broadcasting brauchen Sie kein Redis.
Ably konfigurieren
-
Legen Sie bei Ably ein Konto, eine Anwendung und einen API key an. Er hat die Form
xxxx.yyyy:zzzz. -
Aktivieren Sie in den Einstellungen der Anwendung unter Protocol Adapter Settings die Kompatibilität mit dem Pusher-Protokoll: Echo verbindet sich über
pusher-jsmit Ably. -
In Ihrem Projekt, lokal:
php artisan install:broadcasting --ablyWenn Sie es lieber von Hand machen, installiert
composer require ably/ably-phpdas PHP-SDK. -
In der
.envder Produktion:BROADCAST_CONNECTION=ably ABLY_KEY="xxxx.yyyy:zzzz" VITE_ABLY_PUBLIC_KEY="xxxx.yyyy"
VITE_ABLY_PUBLIC_KEYist nur der Teil des Schlüssels vor dem Doppelpunkt. Der vollständige Schlüssel darf in keinerVITE_-Variable stehen. -
Konfigurieren Sie Echo mit dem Pusher-Adapter von Ably:
import Echo from 'laravel-echo'; import Pusher from 'pusher-js'; window.Pusher = Pusher; window.Echo = new Echo({ broadcaster: 'pusher', key: import.meta.env.VITE_ABLY_PUBLIC_KEY, wsHost: 'main.pusher.ably.net', wsPort: 443, forceTLS: true, disableStats: true, enabledTransports: ['ws', 'wss'], });
-
Deployen Sie und prüfen Sie die Events in der Konsole Ihrer Anwendung bei Ably.
Ably pflegt außerdem einen eigenen Broadcaster für Laravel, ably/laravel-broadcaster, mit plattformspezifischen Funktionen. Wenn Sie ihn verwenden, folgen Sie für den Browser-Teil seiner Dokumentation.
Pusher Channels konfigurieren
-
Legen Sie bei Pusher ein Konto und eine Channels-Anwendung im Cluster
euan. Unter App Keys finden Sieapp_id,keyundsecret. -
Installieren Sie in Ihrem Projekt lokal das Broadcasting:
php artisan install:broadcasting --pusherDer Befehl fragt die Zugangsdaten ab, installiert das PHP-SDK (
pusher/pusher-php-server), Laravel Echo undpusher-js, legtroutes/channels.phpan und konfiguriert Echo. Speichern Sie die Änderungen in Ihrem Repository. -
In der
.envder Produktion (mit Deploy+ über das Menü des Repositorys, .env bearbeiten):BROADCAST_CONNECTION=pusher PUSHER_APP_ID="tu_app_id" PUSHER_APP_KEY="tu_key" PUSHER_APP_SECRET="tu_secret" PUSHER_HOST= PUSHER_PORT=443 PUSHER_SCHEME="https" PUSHER_APP_CLUSTER="eu" VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" VITE_PUSHER_HOST="${PUSHER_HOST}" VITE_PUSHER_PORT="${PUSHER_PORT}" VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
Die
VITE_-Variablen landen im öffentlichen JavaScript: Sie enthalten denkey, der öffentlich ist, aber nie dassecret. -
Prüfen Sie die Echo-Konfiguration, die der Installer angelegt hat. In der Grundform für Pusher sieht sie so aus:
import Echo from 'laravel-echo'; import Pusher from 'pusher-js'; window.Pusher = Pusher; window.Echo = new Echo({ broadcaster: 'pusher', key: import.meta.env.VITE_PUSHER_APP_KEY, cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER, forceTLS: true, });
-
Deployen Sie. Die
VITE_-Variablen werden beim Build mitnpm run buildgelesen: Wenn Sie sie danach ändern, deployen Sie erneut, damit das JavaScript sie übernimmt. -
Öffnen Sie die Website und die Debug Console Ihrer Anwendung bei Pusher: Dort sehen Sie jede Verbindung und jedes gesendete Event.
Für private oder Presence-Kanäle autorisieren Sie jeden Benutzer in routes/channels.php. Laravel registriert die Route /broadcasting/auth, über die Echo diese Autorisierung anfordert.
Ein Event auslösen
Ein Event, das aus der Queue gesendet wird:
namespace App\Events; use App\Models\Pedido; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class PedidoActualizado implements ShouldBroadcast { public function __construct(public Pedido $pedido) {} public function broadcastOn(): array { return [new PrivateChannel('pedidos.'.$this->pedido->user_id)]; } }
Ohne laufenden Queue-Worker ersetzen Sie ShouldBroadcast durch ShouldBroadcastNow. Im Browser:
window.Echo.private(`pedidos.${userId}`) .listen('PedidoActualizado', (e) => console.log(e.pedido));
Wenn das Event nicht ankommt, prüfen Sie der Reihe nach: dass BROADCAST_CONNECTION der des Dienstes ist, dass die Konfiguration nicht mit alten Werten gecacht ist (php artisan config:cache), dass ein Worker die Queue verarbeitet, dass die Konsole des Dienstes das Event empfängt und dass sich der Browser mit dem richtigen key verbindet.
Wir helfen Ihnen beim Anbinden
Wenn Ihre Anwendung Reverb auf einem anderen Server verwendet hat, beschränkt sich die Umstellung meist auf die .env, die Echo-Konfiguration und ein Deployment. Wenn Sie Hilfe brauchen, schreiben Sie uns aus dem Kundenbereich.
Mehr zu Laravel auf dem Hosting unter Laravel installieren. Referenz: Broadcasting in Laravel.
Das könnte Ihnen auch helfen
- Laravel auf einem Hosting mit cPanel installieren (Laravel 13 und 12) Installieren Sie Laravel mit Composer und dem PHP Ihrer Version, konfigurieren Sie Datenbank und pub...
- Node.js und npm für den Build von Assets installieren Installieren Sie Node.js und npm mit NVM, um Assets per SSH, in Deployments oder per Cron zu bauen,...
- PHP-Abhängigkeiten mit Composer auf dem Hosting installieren Verwenden Sie Composer über SSH oder das cPanel-Terminal, um PHP-Abhängigkeiten zu verwalten, und be...
- Dauerhafte Prozesse: Queue-Worker, Horizon und dauerhaft laufende Befehle Lassen Sie Laravel-Queue-Worker, Horizon, ein persistentes Redis oder einen eigenen Befehl in den Ta...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.