Heim >PHP-Framework >Laravel >Detaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt

Detaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt

青灯夜游
青灯夜游nach vorne
2021-09-28 19:42:233459Durchsuche

In der folgenden Tutorial-Kolumne von Laravel erfahren Sie, wie Sie den Laravel-Echo-Server zum Erstellen von Echtzeitanwendungen verwenden. Ich hoffe, dass es für alle hilfreich ist!

Detaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt

Meiner Meinung nach ist Echtzeitkommunikation die Zukunft von APP-Anwendungen. Socket-Dienste sind normalerweise nicht einfach zu implementieren, aber der Laravel Echo-Dienst ändert diese Situation.

In diesem Artikel werde ich kurz vorstellen, wie man einen laufenden Socket-Dienst einrichtet und Ereignisse auf diesem Dienst überträgt. (https://github.com/tlaverdure/laravel-echo-server, Laravel-Supportdokumentation: https://learnku.com/docs/laravel/5.6/broadcasting#driver-prerequisites)

Es ist völlig kostenlos, Sie müssen nur Führen Sie Ihren eigenen Socket-Dienst aus. Sie können auch den standardmäßig integrierten Pusher von Laravel verwenden. Der einzige Nachteil besteht darin, dass er begrenzt ist und Sie bezahlen müssen, wenn Sie das Limit überschreiten. Ich bevorzuge es, diese Dinge selbst zu strukturieren.

Anforderungen:

  • Laravel-Framework (dieses Tutorial verwendet Version 5.6)
  • Redis-Dienst
  • Grundlegende Laravel-Kenntnisse

Laravel-Echo-Server installieren

Zuerst brauchen wir das Gesamtbild Um Laravel-Echo-Server zu installieren, müssen Sie lediglich den folgenden Befehl im Terminal eingeben.

 $ npm install -g laravel-echo-server

Nachdem die Installation abgeschlossen ist, öffnen Sie Ihre Laravel-Anwendung oder starten Sie ein neues Testprojekt:

 $ composer create-project --prefer-dist laravel/laravel echo-test

Als nächstes installieren Sie Predis für unsere Anwendung:

 $ composer require predis/predis

Nach Abschluss der Installation wechseln Sie in das Stammverzeichnis des Projekts und initialisieren das Socket-Dienst:

 $ laravel-echo-server init

Nachdem Sie diesen Befehl ausgeführt haben, werden Sie nach einigen Konfigurationsinformationen zum Socket-Dienst gefragt. Sie können diese entsprechend Ihrer eigenen Situation ausfüllen:

Detaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt

Denken Sie daran, dass dies in einer Produktionsumgebung egal ist Wenn Sie es verwenden, sollten Sie es ausschalten.

Wir können versuchen, den Dienst zu starten und zu sehen, ob er ordnungsgemäß läuft:

$ laravel-echo-server start

Die Ausgabe sieht folgendermaßen aus:

Detaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt

Konfigurieren Sie Laravel, damit Laravel Echo Server ordnungsgemäß funktioniert.

Öffnen Sie Ihren config/app.php-Datei und entkommentieren Sie BroadcastServiceProvider im Providers-Array: config/app.php 文件并且取消 BroadcastServiceProvider 在这个 Providers 数组中的注释:

AppProvidersBroadcastServiceProvider::class,

这个 Provider 将会启动广播路由(你或许已经在 routes/channels.php 文件里面已经看到了)

打开 .env  文件,修改  BROADCAST_DRIVER 的值为你在 laravel-echo-server 初始化时定义的值(Redis 或者 Log)。在本教程中我们将使用 Redis 驱动程序。
同时修改  QUEUE_DRIVER 为你喜欢的任何队列驱动程序,在这个示例中你可以轻松的将其更改为 Redis 驱动程序,因为你在前面已经安装并且在运行了。

接下来我们必须安装 Socket.io 客户端和 Laravel-Echo 包,你可以通过以下操作来安装:

$ npm install --save socket.io-client
$ npm install --save laravel-echo

(在运行这个之前你可能需要运行  npm install  来安装 Laravel 及相关依赖)

接下来打开  resources/assets/js/bootstrap.js  文件, 或者你自己的 引入所有 JS 基础代码的 JS 文件。

现在我们要添加启动 Echo 基础服务的代码:

import Echo from 'laravel-echo'

window.io = require('socket.io-client');
window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
});

现在我们准备在频道上监听消息了!我会在本教程中解释怎么开放频道,接下来开始收听我们的第一个频道:

window.Echo.channel('test-event')
    .listen('ExampleEvent', (e) => {
        console.log(e);
    });

我们通过 JS 代码告诉程序我们订阅了名为 ’test-event' 的频道, 并监听 ‘ExampleEvent’ 事件 (这是事件的类名,你也可以根据你的需要自定义)。

让我们创建这个事件类:

$ php artisan make:event ExampleEvent

这将会在 App/Events 目录下面创建一个叫做 ExampleEvent.php 的事件类
让我们对这个事件类稍作调整使得它能够在我们的 Socket 服务 中能够正常运行,首先确保你的事件类继承于 ShouldBroadcast 接口,就像下面这样;

class ExampleEvent implements ShouldBroadcast

接下来向下滚动找到  broadcastOn  函数,修改它使得我们能够在正确的频道上进行广播:

public function broadcastOn()
{
    return new Channel('test-event');
}

让我们在下面新建一个函数,这样我们才能有一些实例数据:

public function broadcastWith()
{
    return [
        'data' => 'key'
    ];
}

这个函数在事件被调用时调用,它将会把数据返回到你的 Socket 服务中。

现在让我们开始尝试它吧!打开你的 routes/web.php

AppProvidersBroadcastServiceProvider::class,🎜
🎜Dieser Provider wird als Broadcast gestartet Routing (Sie haben es möglicherweise in der Datei routes/channels.php gesehen) 🎜🎜Öffnen Sie die Datei .env und ändern Sie den Wert von BROADCAST_DRIVER Für den Wert, den Sie bei der Initialisierung des Laravel-Echo-Servers definiert haben (Redis oder Log). In diesem Tutorial verwenden wir den Redis-Treiber.
Ändern Sie auch QUEUE_DRIVER in einen beliebigen Warteschlangentreiber. In diesem Beispiel können Sie ihn problemlos in den Redis-Treiber ändern, da Sie ihn bereits installiert haben und ausführen. 🎜🎜Als nächstes müssen wir den Socket.io-Client und das Laravel-Echo-Paket installieren. Sie können es wie folgt installieren: 🎜
Route::get('test-broadcast', function(){
    broadcast(new \App\Events\ExampleEvent);
});
🎜 (Möglicherweise müssen Sie npm install ausführen, um Laravel zu installieren, bevor Sie es ausführen 🎜🎜Öffnen Sie als Nächstes die Datei resources/assets/js/bootstrap.js oder Ihre eigene JS-Datei, die den gesamten JS-Grundcode vorstellt. 🎜🎜Jetzt fügen wir den Code hinzu, um den Echo-Basisdienst zu starten: 🎜
$ php artisan queue:listen --tries=1
🎜Jetzt sind wir bereit, auf Nachrichten auf dem Kanal zu warten! In diesem Tutorial werde ich erklären, wie man einen Kanal öffnet und dann mit dem Anhören unseres ersten Kanals beginnt: 🎜
#!/usr/bin/env bash

laravel-echo-server  start
🎜 Wir teilen dem Programm über JS-Code mit, dass wir den Kanal mit dem Namen „test-event“ abonnieren und hören uns das „ExampleEvent“ an ' event (Dies ist der Klassenname des Ereignisses, Sie können ihn auch an Ihre Bedürfnisse anpassen). 🎜🎜Lassen Sie uns diese Ereignisklasse erstellen:🎜rrreee🎜Dadurch wird eine Ereignisklasse namens ExampleEvent.php im Verzeichnis App/Events erstellt.
Lassen Sie uns dieses Ereignis leicht anpassen Stellen Sie zunächst sicher, dass Ihre Ereignisklasse von der ShouldBroadcast-Schnittstelle erbt, wie folgt: 🎜
🎜class exampleEvent implementiert ShouldBroadcast🎜
🎜Als nächstes scrollen Sie nach unten, um die Funktion broadcastOn zu finden und ändern Sie sie, damit wir auf dem richtigen Kanal senden können: 🎜rrreee🎜 Lassen Sie uns unten eine neue Funktion erstellen, damit wir einige Instanzdaten haben: 🎜rrreee🎜 Diese Funktion wird beim Aufruf des Ereignisses aufgerufen und gibt die Daten an Ihren Socket-Dienst zurück. 🎜🎜Jetzt fangen wir an, es auszuprobieren! Öffnen Sie Ihre Datei routes/web.php und fügen Sie eine Testroute hinzu: 🎜
Route::get('test-broadcast', function(){
    broadcast(new \App\Events\ExampleEvent);
});

(有很多种方式来广播 ExampleEvent  类 ,在这个示例中我使用 Laravel 提供的 broadcast() 助手,在我看来这是最简洁的方式)

启动队列监听:

$ php artisan queue:listen --tries=1

浏览器打开一个包含 JS 文件的页面(可以是 Laravel 默认的欢迎页面),这是第一个页面,请不要关闭次页面,我们已经在此页面上订阅了 Socket 服务。

接下来打开另一个页面访问  /test-broadcast ,这将会返回一个空白页面,但是它将会通过你的 ExampleEvent  类广播到你的 Socket 服务上。返回到我们的第一个页面,打开浏览器控制台,应该可以看到类似信息:

Detaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt

正如你所看到的,数据通过这种形式展示在我们的客户端。你能输入任意数据通过你的  ExampleEvent 类来广播他们,这些数据可以是新闻更新,页面更新,总浏览量或者更多。

因为我们有在 laravel-echo-server 配置中有设置开发者模式,所以你能看到 Socket 服务上的所有基本信息:

Detaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt

现在你已经安装并运行了一个基本的 Socket 服务!但这并不是全部,你可以根据这个来做更多的事情,比如为单个用户提供认证的私有渠道。(当您想广播订单更新或私人消息时)

要做到这一点,我建议你去查看 Laravel 文档了解更多相关的内容。通过这个主题你能做很多事情,让你的应用程序变得更加神奇。你可以在这里找到相应的文档:

Broadcasting - Laravel - The PHP framework for web artisans.laravel.com

其他: 在生产环境中运行

正如我之前所说,你必须在 laravel-echo-server.json 配置文件中禁用开发者模式。 当然在服务器上你可以忽略这个文件,重新初始化它,因为你的主机可能和本地不同。

你还需要保持你的 Socket 服务在你的生产环境中运行,你可以用 Supervisor ,但是我通常使用 PM2  ,它可以方便快速的管理你的服务。 (http://pm2.keymetrics.io/)

这里是我使用 PM2 的 Socket.sh 基本配置:

#!/usr/bin/env bash

laravel-echo-server  start

安装了 PM2 后, 你可以通过 pm2 start socket.sh 命令来启动脚本,运行你的 Socket 服务。

我希望它能够帮助到你。 这篇文章主要介绍的是一些基础知识,接下来我们会继续讨论广播路由的授权和不同的广播频道。

感谢你的阅读!

英文原文地址:https://medium.com/@dennissmink/laravel-echo-server-how-to-24d5778ece8b

译文地址:https://learnku.com/laravel/t/13101/using-laravel-echo-server-to-build-real-time-applications

更多编程相关知识,请访问:编程视频!!

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen