Heim > Backend-Entwicklung > PHP-Tutorial > Reverb in Laravel mit Apache konfigurieren

Reverb in Laravel mit Apache konfigurieren

Mary-Kate Olsen
Freigeben: 2024-12-19 07:33:10
Original
203 Leute haben es durchsucht

Configuring Reverb in Laravel with Apache

Reverb ist eine praktische Alternative zu Pusher für die Übertragung von Ereignissen in Laravel in Echtzeit. Dieser Leitfaden konzentriert sich auf die Konfiguration von Reverb in Laravel 11 für ein Live-Produktionssystem, das hinter Cloudflare mit flexiblem SSL gehostet wird.

Voraussetzungen

Bevor Sie mit der Einrichtung beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  1. Laravel 11 installiert: Sie können mit Composer eine neue Laravel 11-Anwendung einrichten.
  2. Apache-Webserver: Stellen Sie sicher, dass Apache installiert ist und ausgeführt wird.
  3. Cloudflare-Konto: Ihre Anwendung sollte hinter Cloudflare mit aktiviertem flexiblem SSL eingerichtet werden.

Installieren Sie Reverb

Um zu beginnen, müssen Sie Reverb in Ihrem Laravel-Projekt installieren. Führen Sie den folgenden Composer-Befehl aus:

composer require laravel/reverb
Nach dem Login kopieren

Veröffentlichen Sie nach der Installation die Konfigurationsdatei:

php artisan vendor:publish --provider="Laravel\Reverb\ReverbServiceProvider"
Nach dem Login kopieren

Dadurch wird eine config/reverb.php-Datei erstellt, in der Sie die Reverb-Einstellungen anpassen können.

Beispiel für eine Reverb-Konfiguration

Das Folgende ist eine Beispielkonfiguration für 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),
            ],
        ],

    ],

];
Nach dem Login kopieren

.env-Einstellungen

Stellen Sie sicher, dass die folgenden Umgebungsvariablen in Ihrer .env-Datei korrekt konfiguriert sind:

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 
Nach dem Login kopieren

Eine Veranstaltung erstellen

Verwenden Sie den folgenden Artisan-Befehl, um eine neue Ereignisklasse zu generieren:

php artisan make:event MessageSent
Nach dem Login kopieren

Hier ist eine Beispielimplementierung des MessageSent-Ereignisses:

<?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';
    }
}
Nach dem Login kopieren

Beispiel einer Laravel-Klinge

Erstellen Sie eine einfache Blade-Vorlage, um die Reverb-Funktionalität zu testen (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'); });

Nach dem Login kopieren

Apache-Konfiguration

Führen Sie die folgenden Befehle aus, um die erforderlichen Apache-Module zu aktivieren:

sudo a2enmod proxy
sudo a2enmod proxy_wstunnel 
sudo a2enmod rewrite
Nach dem Login kopieren

Unten finden Sie eine Beispielkonfiguration für Ihr Apache VirtualHost-Setup:

<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>
Nach dem Login kopieren

Laufende Dienste

Um die Dienste zu starten, müssen Sie den Event Worker und den Rebel-Server starten.
Führen Sie den folgenden Befehl aus, um den Event Worker zu starten:

php artisan queue:work
Nach dem Login kopieren

Verwenden Sie den folgenden Befehl, um den Rebel-Server auf dem angegebenen Port und Host zu starten:

php artisan reverb:start --port=6001 --host=0.0.0.0
Nach dem Login kopieren

Abschluss

Wenn Sie das CDN nicht für Laravel Echo und Pusher verwenden, müssen Sie die erforderlichen npm-Bibliotheken (pusher-js und laravel-echo) installieren, um Echtzeit-Event-Broadcasting in Ihre Anwendung zu integrieren. Dieses Setup erfordert einen Frontend-Build-Prozess, um die Bibliotheken in Ihrem Projekt zu verwalten und zu bündeln.

Für Anwendungen, die hinter Cloudflare mit vollständigem SSL gehostet werden, muss ein separater VirtualHost mit ordnungsgemäß definierten SSL-Zertifikaten konfiguriert werden. Dies gewährleistet eine sichere WebSocket-Kommunikation und vermeidet Probleme mit SSL/TLS-Nichtübereinstimmungen, die dazu führen können, dass WebSocket-Verbindungen nicht ordnungsgemäß funktionieren.

Das obige ist der detaillierte Inhalt vonReverb in Laravel mit Apache konfigurieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage