Reverb est une alternative pratique à Pusher pour la diffusion d'événements en temps réel dans Laravel. Ce guide se concentre sur la configuration de Reverb dans Laravel 11 pour un système de production en direct hébergé derrière Cloudflare avec Flexible SSL.
Avant de vous lancer dans la configuration, assurez-vous d'avoir les éléments suivants :
Pour commencer, vous devez installer Reverb dans votre projet Laravel. Exécutez la commande Composer suivante :
composer require laravel/reverb
Après l'installation, publiez le fichier de configuration :
php artisan vendor:publish --provider="Laravel\Reverb\ReverbServiceProvider"
Cela créera un fichier config/reverb.php dans lequel vous pourrez ajuster les paramètres de Reverb.
Ce qui suit est un exemple de configuration pour Reverb :
<?php return [ 'default' => env('REVERB_SERVER', 'reverb'), 'servers' => [ 'reverb' => [ 'host' => env('REVERB_HOST', '0.0.0.0'), 'port' => env('REVERB_PORT', 6001), 'hostname' => env('REVERB_HOST'), 'options' => [ 'tls' => [], ], 'max_request_size' => env('REVERB_MAX_REQUEST_SIZE', 10_000), 'scaling' => [ 'enabled' => env('REVERB_SCALING_ENABLED', false), 'channel' => env('REVERB_SCALING_CHANNEL', 'reverb'), 'server' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'port' => env('REDIS_PORT', '6379'), 'username' => env('REDIS_USERNAME'), 'password' => env('REDIS_PASSWORD'), 'database' => env('REDIS_DB', '0'), ], ], 'pulse_ingest_interval' => env('REVERB_PULSE_INGEST_INTERVAL', 15), 'telescope_ingest_interval' => env('REVERB_TELESCOPE_INGEST_INTERVAL', 15), ], ], 'apps' => [ 'provider' => 'config', 'apps' => [ [ 'key' => env('REVERB_APP_KEY'), 'secret' => env('REVERB_APP_SECRET'), 'app_id' => env('REVERB_APP_ID'), 'options' => [ 'host' => env('REVERB_HOST'), 'port' => env('REVERB_PORT', 443), 'scheme' => env('REVERB_SCHEME', 'https'), 'useTLS' => env('REVERB_SCHEME', 'https') === 'https', ], 'allowed_origins' => ['*'], 'ping_interval' => env('REVERB_APP_PING_INTERVAL', 60), 'activity_timeout' => env('REVERB_APP_ACTIVITY_TIMEOUT', 30), 'max_message_size' => env('REVERB_APP_MAX_MESSAGE_SIZE', 10_000), ], ], ], ];
Assurez-vous que les variables d'environnement suivantes sont correctement configurées dans votre fichier .env :
BROADCAST_CONNECTION=reverb QUEUE_CONNECTION=database REVERB_HOST=127.0.0.1 REVERB_PORT=6001 REVERB_APP_ID=<app-key> REVERB_APP_KEY=<app-key> REVERB_APP_SECRET=<app-secret> REVERB_SCHEME=http VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" VITE_REVERB_HOST="example.com" VITE_REVERB_PORT=443 VITE_REVERB_SCHEME=https
Utilisez la commande Artisan suivante pour générer une nouvelle classe d'événement :
php artisan make:event MessageSent
Voici un exemple d'implémentation de l'événement MessageSent :
<?php namespace App\Events; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; use Illuminate\Broadcasting\Channel; class MessageSent implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $message; public function __construct($message) { $this->message = $message; } public function broadcastOn(): Channel { return new Channel('chat-channel'); } public function broadcastAs(): string { return 'message-sent'; } }
Créez un modèle Blade simple pour tester la fonctionnalité Reverb (welcome.blade.php) :
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>Laravel Reverb WebSocket Test</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/pusher/8.3.0/pusher.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/laravel-echo/1.17.1/echo.iife.min.js"></script> </head> <body> <h1>Laravel Reverb WebSocket Test</h1> <p>Open the console to see WebSocket messages.</p> <button> <h2> Defining Routes </h2> <p>Below is the code to define the required routes:<br> </p> <pre class="brush:php;toolbar:false"><?php use Illuminate\Support\Facades\Route; use App\Events\MessageSent; Route::post('/send-message', function (\Illuminate\Http\Request $request) { event(new MessageSent($request->input('message'))); return response()->json(['success' => true]); }); Route::get('/', function () { return view('welcome'); });
Exécutez les commandes suivantes pour activer les modules Apache nécessaires :
sudo a2enmod proxy sudo a2enmod proxy_wstunnel sudo a2enmod rewrite
Vous trouverez ci-dessous un exemple de configuration pour votre configuration Apache VirtualHost :
<VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com DocumentRoot /var/www/example.com/public ProxyPreserveHost On ProxyRequests Off ProxyPass /app ws://127.0.0.1:6001/app ProxyPassReverse /app ws://127.0.0.1:6001/app SetEnvIf X-Forwarded-Proto https HTTPS=on ErrorLog /var/www/logs/example.com_error.log CustomLog /var/www/logs/example.com_access.log combined </VirtualHost> <Directory /var/www/example.com> Options -Indexes +FollowSymLinks -MultiViews AllowOverride All Require all granted </Directory>
Pour démarrer les services, vous devrez lancer le gestionnaire d'événements et le serveur Rebel.
Exécutez la commande suivante pour lancer le gestionnaire d'événements :
php artisan queue:work
Utilisez la commande ci-dessous pour démarrer le serveur Rebel sur le port et l'hôte spécifiés :
php artisan reverb:start --port=6001 --host=0.0.0.0
Si vous n'utilisez pas le CDN pour Laravel Echo et Pusher, vous devrez installer les bibliothèques npm requises (pusher-js et laravel-echo) pour intégrer la diffusion d'événements en temps réel dans votre application. Cette configuration nécessite un processus de construction frontend pour gérer et regrouper les bibliothèques au sein de votre projet.
Pour les applications hébergées derrière Cloudflare avec Full SSL, un VirtualHost distinct doit être configuré avec des certificats SSL correctement définis. Cela garantit une communication WebSocket sécurisée et évite les problèmes de non-concordance SSL/TLS, qui peuvent empêcher les connexions WebSocket de fonctionner correctement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!