Heim  >  Artikel  >  PHP-Framework  >  Laravel-Entwicklung: Wie kann man mit Laravel Broadcasting Event-Broadcasting implementieren?

Laravel-Entwicklung: Wie kann man mit Laravel Broadcasting Event-Broadcasting implementieren?

PHPz
PHPzOriginal
2023-06-13 19:56:41967Durchsuche

In Echtzeit-Webanwendungen ist die Übertragung von Ereignissen eine der sehr wichtigen Funktionen. Das Laravel-Framework bietet sofort einsatzbereite Event-Broadcasting-Funktionen, und Event-Broadcasting und -Überwachung können einfach über Laravel Broadcasting implementiert werden. In diesem Artikel wird erläutert, wie Sie mit Laravel Broadcasting die Übertragung von Ereignissen implementieren.

1. Verständnis der Ereignisübertragung

Wenn in Webanwendungen ein Ereignis eintritt, z. B. eine erfolgreiche Benutzerregistrierung, eine Artikelveröffentlichung usw., hoffen wir, dass andere Benutzer rechtzeitig relevante Informationen erhalten können. Wenn Sie derzeit die herkömmliche Seitenaktualisierungs- oder Ajax-Abfragemethode verwenden, verbraucht diese viel Bandbreite und Serverressourcen und kann den Echtzeitbedarf nicht decken. Event-Broadcasting kann dieses Problem lösen.

Bei der Ereignisübertragung wird ein Ereignis an einen bestimmten Kanal oder eine bestimmte Übertragungsgruppe gesendet. Anschließend können Benutzer, die den bestimmten Kanal oder die bestimmte Übertragungsgruppe überwachen, sofort relevante Informationen empfangen. Durch Event-Broadcasting kann die Anzahl der Kommunikationen zwischen Server und Client erheblich reduziert, Netzwerklatenz und Bandbreitenverbrauch reduziert sowie die Leistung und Benutzererfahrung von Webanwendungen verbessert werden.

2. Installieren Sie Laravel Broadcasting

Bevor Sie Laravel Broadcasting verwenden, müssen Sie Laravel Echo und die zugehörigen Broadcast-Treiber installieren. Laravel Echo ist die Socket.io-Clientbibliothek, die mit dem Laravel-Framework geliefert wird und für die Echtzeitkommunikation mit Broadcast-Diensten verwendet wird. Der Broadcast-Treiber stellt APIs für die Interaktion mit verschiedenen Broadcast-Diensten wie Redis und Pusher bereit. In diesem Artikel verwenden wir Pusher als Broadcast-Dienst.

  1. Installieren Sie das Laravel Echo und Pusher SDK , Fügen Sie der .env-Datei eine Pusher-bezogene Konfiguration hinzu:
  2. npm install --save laravel-echo pusher-js
Darunter müssen Ihre App-ID, Ihr App-Schlüssel und Ihr App-Geheimnis entsprechend der tatsächlichen Situation geändert werden.

3. Ereignisse und Kanäle erstellen
  1. In Laravel werden Ereignisse über die Event-Klasse implementiert. Wir können für jedes Ereignis, das übertragen werden muss, eine entsprechende Ereignisklasse erstellen. In diesem Artikel nehmen wir eine erfolgreiche Benutzerregistrierung als Beispiel für die Erstellung eines UserRegistered-Ereignisses. Führen Sie zunächst den folgenden Befehl im Terminal aus, um die UserRegistered-Ereignisklasse zu erstellen:
  2. AppProvidersBroadcastServiceProvider::class,
Öffnen Sie als Nächstes die Datei app/Events/UserRegistered.php und ändern Sie den Code wie folgt:

BROADCAST_DRIVER=pusher

PUSHER_APP_ID=your-app-id
PUSHER_APP_KEY=your-app-key
PUSHER_APP_SECRET=your-app-secret

Im obigen Code haben wir ein UserRegistered-Ereignis erstellt Klasse und injizierte das Benutzermodell in die Konstruktionsmethode. Anschließend definieren wir in der Methode „broadcastOn()“ den Kanal, an den das Ereignis gesendet werden muss, wobei ein privater Kanal in der Form „user.{user_id}“ angegeben wird.

Als nächstes müssen wir einen UserChannel-Kanal erstellen, um Benutzer des Kanals „user.{user_id}“ zu überwachen. Es gibt zwei Möglichkeiten, einen UserChannel-Kanal zu erstellen: manuelle Registrierung und automatische Erkennung.

Manuelle Registrierungsmethode:

Registrieren Sie den UserChannel-Kanal in der Datei app/Providers/BroadcastServiceProvider.php:

php artisan make:event UserRegistered

Automatische Erkennungsmethode:

Erstellen Sie eine UserChannel.php-Datei im Verzeichnis app/Broadcasting und ändern Sie den Code wie folgt:

namespace AppEvents;

use AppUser;
use IlluminateQueueSerializesModels;
use IlluminateFoundationEventsDispatchable;

class UserRegistered
{
    use Dispatchable, SerializesModels;

    public $user;

    /**
     * Create a new event instance.
     *
     * @param  AppUser  $user
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return IlluminateBroadcastingChannel|array
     */
    public function broadcastOn()
    {
        return new Channel('user.'.$this->user->id);
    }
}

Im obigen Code haben wir eine UserChannel-Kanalklasse erstellt und das User-Modell in den Konstruktor eingefügt. Überprüfen Sie dann, ob der Benutzer über die Methode „join()“ Zugriff auf den Kanal hat.

4. Ereignisse übertragen

Nachdem wir Ereignisse und Kanäle erstellt haben, können wir die Funktion „broadcast()“ verwenden, um Ereignisse an den angegebenen Kanal zu übertragen. In diesem Artikel implementieren wir die UserRegistered-Ereignisübertragung in der UserController-Klasse nach erfolgreicher Benutzerregistrierung:

use IlluminateSupportFacadesBroadcast;
use AppBroadcastingUserChannel;

Broadcast::channel('user.{userId}', UserChannel::class);

Im obigen Code erstellen wir zunächst einen Benutzer und führen einen Speichervorgang durch. Verwenden Sie dann die Funktion event(), um das UserRegistered-Ereignis zu übertragen und andere Benutzer darüber zu informieren, dass sich ein neuer Benutzer erfolgreich registriert hat.

5. Ereignisse überwachen

Nach dem Erstellen von Ereignissen und Kanälen können andere Benutzer Ereignisse empfangen, indem sie die entsprechenden Kanäle überwachen. Als nächstes werden wir über Laravel Echo auf das UserRegistered-Ereignis warten.

Ändern Sie die Konfigurationsdatei

Fügen Sie zunächst den folgenden Code in die Datei resources/assets/js/bootstrap.js ein:

namespace AppBroadcasting;

use AppUser;

class UserChannel
{
    /**
     * Create a new channel instance.
     *
     * @param  AppUser  $user
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Authenticate the user's access to the channel.
     *
     * @return array|bool
     */
    public function join(User $user, $userId)
    {
        return $user->id === (int) $userId;
    }
}

Im obigen Code verwenden wir Laravel Echo und Pusher SDK, um den Pusher-Broadcast-Dienst zu verbinden . PUSHER_APP_KEY und PUSHER_APP_CLUSTER können in der .env-Datei festgelegt werden.

Erstellen Sie einen Listener

  1. Öffnen Sie die Datei resources/assets/js/app.js und fügen Sie den folgenden Code hinzu:
  2. namespace AppHttpControllers;
    
    use AppUser;
    use AppEventsUserRegistered;
    use IlluminateHttpRequest;
    
    class UserController extends Controller
    {
        /**
         * Register a new user.
         *
         * @param  IlluminateHttpRequest  $request
         * @return IlluminateHttpResponse
         */
        public function register(Request $request)
        {
            $user = new User([
                'name' => $request->input('name'),
                'email' => $request->input('email'),
                'password' => bcrypt($request->input('password')),
            ]);
            $user->save();
    
            event(new UserRegistered($user));
    
            return response()->json([
                'message' => 'User registered successfully!',
                'user' => $user,
            ]);
        }
    }
Im obigen Code hören wir über das Fenster „user.{“ auf „user.{“. „channel() method user_id}“-Kanal und der Ereignistyp ist als „UserRegistered“ angegeben. Dieser Code wird ausgeführt, nachdem sich der Benutzer angemeldet hat, um sicherzustellen, dass jeder Benutzer nur seinen eigenen Kanal hört.

6. Testen Sie: Registrieren Sie einen neuen Benutzer in der Anwendung und prüfen Sie dann, ob ein neues Benutzerregistrierungsereignis in der Konsole empfangen wird.

Durch die oben genannten Schritte haben wir den Prozess der Verwendung von Laravel Broadcasting zur Implementierung von Event-Broadcasting abgeschlossen. Die Übertragung von Ereignissen ist eine der wichtigen Funktionen von Echtzeit-Webanwendungen, die die Leistung und Benutzererfahrung von Webanwendungen erheblich verbessern kann.

    Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie kann man mit Laravel Broadcasting Event-Broadcasting implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    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