Heim >PHP-Framework >Laravel >Detaillierte Erklärung, wie Laravel-echo-server Echtzeitanwendungen erstellt
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!
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-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:
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:
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. 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.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 服务上。返回到我们的第一个页面,打开浏览器控制台,应该可以看到类似信息:
正如你所看到的,数据通过这种形式展示在我们的客户端。你能输入任意数据通过你的 ExampleEvent
类来广播他们,这些数据可以是新闻更新,页面更新,总浏览量或者更多。
因为我们有在 laravel-echo-server 配置中有设置开发者模式,所以你能看到 Socket 服务上的所有基本信息:
现在你已经安装并运行了一个基本的 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!