Laravel Reverb è un pacchetto per Laravel, un framework per applicazioni web PHP, che facilita la comunicazione in tempo reale e basata sugli eventi. In genere utilizza WebSocket per fornire aggiornamenti e interazioni in tempo reale nelle applicazioni web. Ciò è utile per le applicazioni che richiedono aggiornamenti istantanei dei dati, come applicazioni di chat, notifiche in tempo reale e dashboard in tempo reale.
Nella documentazione di Laravel ci sono istruzioni su come utilizzarlo in un ambiente di test e in produzione utilizzando Nginx come server. Tuttavia, non ci sono istruzioni chiare su come farlo funzionare su Apache2. Prima di approfondire come farlo funzionare su Apache, dobbiamo prima capire come funziona Laravel Reverb.
Principio di funzionamento
Anche se potresti pensare che Laravel Reverb gestisca la comunicazione avanti e indietro tramite Websocket, approfondire la configurazione evidenzierà che è necessaria anche la comunicazione HTTP/HTTPS. In base alla nostra osservazione, Laravel Reverb aiuta il frontend a ricevere in tempo reale gli eventi inviati sul backend (Laravel). Non esiste una guida chiara su come dal frontend è possibile utilizzare il canale aperto per inviare messaggi al backend. Per farlo, è necessario inviare una richiesta HTTP al backend. La stessa logica si applica a Laravel che vuole inviare eventi al server WebSocket.
Considera questo scenario di un sito Web di e-commerce in cui un utente aggiunge prodotti alla scheda e desideriamo che l'icona del carrello aumenti il numero di articoli nel carrello.
Create Amazing Websites
Con il miglior generatore di pagine gratuito Elementor
Parti ora- Il primo passo sarà connettersi al server WebSocket utilizzando Laravel Echo (fare riferimento alla trasmissione su laravel per ulteriori dettagli) e ascoltare un canale specifico.
- Dal backend, invieremo un evento quando il prodotto nel carrello sarà aumentato
- Laravel attiverà una richiesta POST al server WebSocket, che in cambio invierà un messaggio al tuo front-end connesso a un canale.
In base a questo scenario, la semplice configurazione del WebSocket non è sufficiente per farlo funzionare, poiché dobbiamo anche abilitare il supporto per la richiesta HTTP.
Configurazione del WebSocket
Laravel Reverb utilizza Node.js per gestire la comunicazione WebSocket. Durante il processo di installazione di Laravel Reverb , noterai che il nodo js è in qualche modo coinvolto. Leggendo la documentazione di Laravel, capirai meglio la configurazione di base necessaria per la configurazione iniziale del riverbero Laravel.
Usando:
php artisan install:broadcasting
Avrai le impostazioni predefinite aggiunte al tuo file .env. Ad esempio, il tuo: REVERB_APP_ID, REVERB_APP_KEY e REVERB_APP_SECRET saranno configurati con valori personalizzati predefiniti. La parte che dovrai configurare è la posizione del server WebSocket e il modo in cui Laravel comunica con esso.
Distribuzione di WebSocket nel sottodominio
Idealmente, dovrai creare un sottodominio. Sebbene sia vero che puoi comunque ospitare tutto sullo stesso dominio, potresti ritrovarti con una configurazione Apache gonfia. Tuttavia, dividere le cose ti aiuterà a individuare rapidamente dove potrebbe essere il problema (questa è la mia opinione, puoi fare come preferisci).
Assicuriamoci innanzitutto che il nostro file .env sia pronto per ciò che vogliamo ottenere:
- RIVERBERO_SERVER_HOST: 127.0.0.1
- REVERB_SERVER_PORT: 8080
- REVERB_HOST: ws.codewatchers.com
- RIVERBERO_PORTA: 443
- RIVERBERO_SCHEMA: https
Decideremo di creare un sottodominio denominato "ws.codewatchers.com" in cui distribuiremo il nostro server WebSocket. Nella tua situazione, cambia ws.codewatchers.com con il dominio di tuo gradimento.
<VirtualHost *:443>
ServerName ws.codewatchers.com
ServerAlias ws.codewatchers.com
ErrorLog ${APACHE_LOG_DIR}/ws.codewatchers.com-error.log
CustomLog ${APACHE_LOG_DIR}/ws.codewatchers.com-access.log combined
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /path/to/certificate/local.crt
SSLCertificateKeyFile /path/to/certificate/local.key
ProxyPass /app "ws://127.0.0.1:8080/app"
ProxyPassReverse /app "ws://127.0.0.1:8080/app"
</VirtualHost>
Tieni presente che qui utilizziamo SSL, quindi potrebbe essere necessario che venga emesso un certificato per il tuo sottodominio. Puoi usare Certbot per questo (Bing Copilot ti aiuterà in questo).
Aggiunta del supporto per HTTP/S
Come detto sopra, il server Laravel Reverb deve supportare anche la normale richiesta HTTP. Per questo, abbiamo inoltrato tramite proxy tutte le richieste aventi /app a "ws://127.0.0.1:8080/app". È il segmento URL utilizzato per i socket. Inoltre, Laravel utilizza /apps per inviare richieste POST, quindi aggiungeremo una nuova configurazione alla configurazione Apache che abbiamo sopra:
ProxyPass / "http://127.0.0.1:8080/"
ProxyPassReverse / "http://127.0.0.1:8080"
Qui, vogliamo che le altre richieste che non hanno "/app" (rigorosamente) vengano inoltrate tramite normali richieste HTTP.
Una volta terminato, non dimenticare di ricaricare la configurazione di Apache utilizzando questo:
sudo service apache2 reload
Configurazione Supervisore
Il supervisore è una parte importante in questo senso, poiché gli daremo istruzioni per eseguire il server di riverbero per noi. La parte buona qui è che lo riavvierà ogni volta che fallisce l'esecuzione. siamo quindi sicuri che il WebSocket sarà sempre (o quasi) in esecuzione. Laravel ha una sezione brevemente dettagliata per Supervisor , ma andremo in profondità e forniremo un esempio:
[program:laravel-reverb]
command=php artisan reverb:start
directory=/path/to/your/laravel/project
autostart=true
autorestart=true
stderr_logfile=/path/to/desired/logfile.log
stdout_logfile=/path/to/desired/logfile-out.log
user=ubuntu
Supponiamo che tu lo stia eseguendo su Ubuntu come utente " ubuntu ". Potrai regolare questi parametri come desiderato.
Code e pianificazione delle attività
Se hai code eseguite in modo asincrono (database o redis), devi assicurarti che siano ben configurate e funzionanti. In effetti, gli eventi trasmessi vengono eseguiti come lavori.
Potrebbe essere necessario fare riferimento alla documentazione di Laravel per configurare la pianificazione delle attività . Facoltativamente installerai Laravel Telescope , per monitorare i tuoi lavori e controllare come vengono attivati.
Potresti anche utilizzare la console del browser per verificare come funziona il tuo WebSocket.
Speriamo che questo tutorial ti sia stato utile, se hai riscontrato problemi durante la lettura, faccelo sapere.