
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.
Prasyarat
Sebelum menyelam ke dalam persediaan, pastikan anda mempunyai perkara berikut:
-
Laravel 11 dipasang: Anda boleh menyediakan aplikasi Laravel 11 baharu menggunakan Komposer.
-
Pelayan web Apache: Pastikan Apache dipasang dan berjalan.
-
Akaun Cloudflare: Aplikasi anda harus disediakan di belakang Cloudflare dengan SSL Fleksibel didayakan.
Pasang Reverb
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.
Contoh Konfigurasi 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),
],
],
],
];
.env Tetapan
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
Mencipta Acara
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';
}
}
Contoh Bilah Laravel
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'); });
Konfigurasi Apache
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>
Perkhidmatan Menjalankan
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
Kesimpulan
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!