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

> Il server ufficiale che porta la comunicazione WebSocket in tempo reale alle applicazioni Laravel

<Info>
  Questa pagina si concentra su setup ed esercizio del server Reverb.
  Per la creazione degli eventi broadcast e Laravel Echo consulta [Broadcasting](/it/broadcasting).
</Info>

## Cos'è Reverb

[Laravel Reverb](https://github.com/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](/it/broadcasting): trasmette al browser via WebSocket gli eventi lato server.

```mermaid theme={null}
flowchart LR
    A["Browser<br>Laravel Echo"] -->|"Connessione WebSocket"| B["Server<br>Laravel Reverb"]
    B -->|"Autorizzazione, routing"| C["Gestione<br>canali"]
    C -->|"Distribuzione eventi"| A
    D["App Laravel<br>emissione evento"] -->|"Broadcast (via coda)"| B
```

## Installazione

Con `install:broadcasting` installi tutte le dipendenze incluso Reverb.

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

Puoi selezionare Reverb nel prompt o passare `--reverb`.

```shell theme={null}
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:

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

## Configurazione

### Credenziali dell'app

Imposta le credenziali di connessione tra client e server.

```ini theme={null}
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`.

```php theme={null}
'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`.

```php theme={null}
'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.

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

Per certificati manuali imposta `tls` in `config/reverb.php`.

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

## Avvio del server

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

Predefinito `0.0.0.0:8080`.
Con `--host` / `--port` cambi l'indirizzo.

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

Anche via env:

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

<Info>
  `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.
</Info>

### Modalità debug

Reverb non emette debug info di default. Con `--debug` vedi connessioni e messaggi.

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

### Riavvio

Per applicare modifiche al codice devi riavviare.
`reverb:restart` termina in modo graceful.

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

Con Supervisor, si riavvia automaticamente.

## Monitoraggio

Reverb si integra con [Laravel Pulse](https://laravel.com/docs/pulse).
Mostra connessioni e messaggi in tempo reale.

Aggiungi i recorder in `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,
    ],

    // ...
],
```

Nel template della dashboard:

```blade theme={null}
<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.

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

Modifica `/etc/security/limits.conf`.

```ini theme={null}
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`.

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

Se disponibile, Reverb lo usa automaticamente.

### Reverse proxy Nginx

In produzione fai da proxy con 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 usa `/app` per le connessioni WebSocket e `/apps` per le API. Consenti entrambi.
</Warning>

Per aumentare le connessioni, regola `worker_rlimit_nofile` e `worker_connections`.

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

### Gestione dei processi (Supervisor)

Imposta `minfds`.

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

Configurazione:

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

### Scaling (Redis)

Per scalare orizzontalmente usa il pub/sub di Redis.

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

Abilita nello `.env`:

```env theme={null}
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.

<Info>
  [Laravel Cloud](https://cloud.laravel.com) offre infrastruttura WebSocket completamente gestita per app compatibili con Reverb.
</Info>

## Eventi

Reverb emette eventi nel ciclo di vita di connessioni e messaggi.
Ascoltali con [listener](/it/events).

| Evento             | Descrizione                              |
| ------------------ | ---------------------------------------- |
| `ChannelCreated`   | Canale creato (primo abbonato)           |
| `ChannelRemoved`   | Canale rimosso (ultimo abbonato via)     |
| `ConnectionPruned` | Connessione vecchia terminata dal server |
| `MessageReceived`  | Ricevuto un messaggio dal client         |
| `MessageSent`      | Inviato un messaggio al client           |

Tutti in `Laravel\Reverb\Events`.

## Prossimi passi

<Card title="Broadcasting" href="/it/broadcasting">
  Creazione eventi broadcast, autorizzazione dei canali e configurazione di Laravel Echo.
</Card>

<Card title="Eventi e listener" href="/it/events">
  Il sistema di eventi di Laravel per ricevere gli eventi emessi da Reverb.
</Card>


## Related topics

- [Broadcasting](/it/broadcasting.md)
- [FAQ sulla nuova struttura dell'app da Laravel 11](/it/advanced/app-structure-faq.md)
- [Deployment](/it/deployment.md)
- [Laravel Cloud — la panoramica completa del PaaS dedicato a Laravel](/it/blog/laravel-cloud.md)
- [Aggiornamenti Laravel di marzo 2026](/it/blog/changelog/202603.md)
