Vai al contenuto principale
Questa pagina si concentra su setup ed esercizio del server Reverb. Per la creazione degli eventi broadcast e Laravel Echo consulta Broadcasting.

Cos’è Reverb

Laravel Reverb è il server WebSocket self-hosted ufficiale. Aggiunge comunicazione real-time veloce e scalabile senza dipendenze da servizi esterni. Reverb opera sopra il broadcasting: trasmette al browser via WebSocket gli eventi lato server.

Installazione

Con install:broadcasting installi tutte le dipendenze incluso Reverb.
php artisan install:broadcasting
Puoi selezionare Reverb nel prompt o passare --reverb.
php artisan install:broadcasting --reverb
Il comando esegue:
  • Installazione del pacchetto Composer (laravel/reverb)
  • Installazione dei pacchetti NPM (laravel-echo, pusher-js)
  • Aggiunta di variabili in .env
  • Generazione di config/reverb.php
Manualmente:
composer require laravel/reverb
php artisan reverb:install

Configurazione

Credenziali dell’app

Imposta le credenziali di connessione tra client e server.
REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-secret
I valori sono referenziati in apps di config/reverb.php.

Origini consentite (Allowed Origins)

Limita le origini in allowed_origins di config/reverb.php.
'apps' => [
    [
        'app_id' => 'my-app-id',
        'allowed_origins' => ['laravel.com'],
        // ...
    ]
]
Con * accetti tutte le origini.

Supporto multi-app

Puoi supportare più applicazioni su un unico server Reverb aggiungendo voci a apps.
'apps' => [
    [
        'app_id' => 'my-app-one',
        // ...
    ],
    [
        'app_id' => 'my-app-two',
        // ...
    ],
],

SSL

In produzione Nginx termina SSL e fa da proxy verso Reverb. Per usare wss:// in sviluppo, sfrutta i certificati di Laravel Herd o Valet.
php artisan reverb:start --host="0.0.0.0" --port=8080 --hostname="laravel.test"
Per certificati manuali imposta tls in config/reverb.php.
'options' => [
    'tls' => [
        'local_cert' => '/path/to/cert.pem'
    ],
],

Avvio del server

php artisan reverb:start
Predefinito 0.0.0.0:8080. Con --host / --port cambi l’indirizzo.
php artisan reverb:start --host=127.0.0.1 --port=9000
Anche via env:
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=8080
REVERB_SERVER_HOST / REVERB_SERVER_PORT sono gli indirizzi di ascolto del server. REVERB_HOST / REVERB_PORT sono l’indirizzo verso cui Laravel invia i messaggi broadcast. In produzione possono differire.

Modalità debug

Reverb non emette debug info di default. Con --debug vedi connessioni e messaggi.
php artisan reverb:start --debug

Riavvio

Per applicare modifiche al codice devi riavviare. reverb:restart termina in modo graceful.
php artisan reverb:restart
Con Supervisor, si riavvia automaticamente.

Monitoraggio

Reverb si integra con Laravel Pulse. Mostra connessioni e messaggi in tempo reale. Aggiungi i recorder in config/pulse.php.
use Laravel\Reverb\Pulse\Recorders\ReverbConnections;
use Laravel\Reverb\Pulse\Recorders\ReverbMessages;

'recorders' => [
    ReverbConnections::class => [
        'sample_rate' => 1,
    ],

    ReverbMessages::class => [
        'sample_rate' => 1,
    ],

    // ...
],
Nel template della dashboard:
<x-pulse>
    <livewire:reverb.connections cols="full" />
    <livewire:reverb.messages cols="full" />
    ...
</x-pulse>
Avvia il demone pulse:check sul server Reverb. In scaling orizzontale eseguilo su una sola macchina.

Esercizio in produzione

Limite di file aperti

Ogni connessione WebSocket usa un file descriptor. Controlla il limite e aumentalo se serve.
ulimit -n
Modifica /etc/security/limits.conf.
forge        soft  nofile  10000
forge        hard  nofile  10000

Event loop (ext-uv)

Il default stream_select di PHP ha un limite di 1.024 file. Per > 1.000 connessioni installa ext-uv.
pecl install uv
Se disponibile, Reverb lo usa automaticamente.

Reverse proxy Nginx

In produzione fai da proxy con Nginx.
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 usa /app per le connessioni WebSocket e /apps per le API. Consenti entrambi.
Per aumentare le connessioni, regola worker_rlimit_nofile e worker_connections.
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;
}

Gestione dei processi (Supervisor)

Imposta minfds.
[supervisord]
...
minfds=10000
Configurazione:
[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 (Redis)

Per scalare orizzontalmente usa il pub/sub di Redis. Abilita nello .env:
REVERB_SCALING_ENABLED=true
Reverb usa la connessione Redis predefinita dell’app per scambiare messaggi tra i server. Avvia più server Reverb e distribuisci con il load balancer.
Laravel Cloud offre infrastruttura WebSocket completamente gestita per app compatibili con Reverb.

Eventi

Reverb emette eventi nel ciclo di vita di connessioni e messaggi. Ascoltali con listener.
EventoDescrizione
ChannelCreatedCanale creato (primo abbonato)
ChannelRemovedCanale rimosso (ultimo abbonato via)
ConnectionPrunedConnessione vecchia terminata dal server
MessageReceivedRicevuto un messaggio dal client
MessageSentInviato un messaggio al client
Tutti in Laravel\Reverb\Events.

Prossimi passi

Broadcasting

Creazione eventi broadcast, autorizzazione dei canali e configurazione di Laravel Echo.

Eventi e listener

Il sistema di eventi di Laravel per ricevere gli eventi emessi da Reverb.
Ultima modifica il 13 luglio 2026