Rumah >pembangunan bahagian belakang >tutorial php >Mengkonfigurasi Reverb dalam Laravel dengan Apache
Reverb ialah alternatif praktikal kepada Pusher untuk penyiaran acara masa nyata dalam Laravel. Panduan ini menumpukan pada mengkonfigurasi Reverb dalam Laravel 11 untuk sistem pengeluaran langsung yang dihoskan di belakang Cloudflare dengan SSL Fleksibel.
Sebelum menyelam ke dalam persediaan, pastikan anda mempunyai perkara berikut:
Untuk bermula, anda perlu memasang Reverb dalam projek Laravel anda. Jalankan arahan Komposer berikut:
composer require laravel/reverb
Selepas pemasangan, terbitkan fail konfigurasi:
php artisan vendor:publish --provider="Laravel\Reverb\ReverbServiceProvider"
Ini akan mencipta fail config/reverb.php di mana anda boleh melaraskan tetapan Reverb.
Berikut ialah konfigurasi contoh untuk 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), ], ], ], ];
Pastikan pembolehubah persekitaran berikut dikonfigurasikan dengan betul dalam fail .env anda:
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
Gunakan perintah Artisan berikut untuk menjana kelas acara baharu:
php artisan make:event MessageSent
Berikut ialah contoh pelaksanaan acara 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'; } }
Buat templat Blade mudah untuk menguji kefungsian 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'); });
Jalankan arahan berikut untuk mendayakan modul Apache yang diperlukan:
sudo a2enmod proxy sudo a2enmod proxy_wstunnel sudo a2enmod rewrite
Di bawah ialah contoh konfigurasi untuk persediaan Apache VirtualHost anda:
<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>
Untuk memulakan perkhidmatan, anda perlu melancarkan pekerja acara dan pelayan Rebel.
Jalankan arahan berikut untuk memulakan pekerja acara:
php artisan queue:work
Gunakan arahan di bawah untuk memulakan pelayan Rebel pada port dan hos yang ditentukan:
php artisan reverb:start --port=6001 --host=0.0.0.0
Jika anda tidak menggunakan CDN untuk Laravel Echo dan Pusher, anda perlu memasang pustaka npm yang diperlukan (pusher-js dan laravel-echo) untuk menyepadukan penyiaran acara masa nyata ke dalam aplikasi anda. Persediaan ini memerlukan proses binaan bahagian hadapan untuk mengurus dan menggabungkan perpustakaan dalam projek anda.
Untuk aplikasi yang dihoskan di belakang Cloudflare dengan SSL Penuh, VirtualHost yang berasingan mesti dikonfigurasikan dengan sijil SSL yang ditakrifkan dengan betul. Ini memastikan komunikasi WebSocket selamat dan mengelakkan isu dengan ketidakpadanan SSL/TLS, yang boleh menghalang sambungan WebSocket daripada berfungsi dengan betul.
Atas ialah kandungan terperinci Mengkonfigurasi Reverb dalam Laravel dengan Apache. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!