다음 튜토리얼 칼럼인 Laravel에서는 Laravel-echo-server를 사용하여 실시간 애플리케이션을 구축하는 방법을 소개합니다. 모든 분들께 도움이 되길 바랍니다!
제 생각에는 실시간 커뮤니케이션이 APP 애플리케이션의 미래입니다. 소켓 서비스는 일반적으로 구현하기 쉽지 않지만 Laravel Echo 서비스는 이러한 상황을 바꿉니다.
이 글에서는 실행 중인 소켓 서비스를 구축하는 방법과 이 서비스에 대한 이벤트를 방송하는 방법을 간략하게 소개하겠습니다. (https://github.com/tlavardure/laravel-echo-server, Laravel 지원 문서: https://learnku.com/docs/laravel/5.6/broadcasting#driver-prerequisites)
완전 무료입니다. 자신의 소켓 서비스를 실행하십시오. Laravel의 기본 통합 푸셔를 사용할 수도 있습니다. 유일한 단점은 제한이 있고 한도를 초과하면 비용을 지불해야 한다는 것입니다. 나는 이런 것들을 직접 구성하는 것을 선호합니다.
요구 사항:
laravel-echo-server 설치
먼저 전체적인 그림이 필요합니다 laravel-echo-server를 설치하려면 터미널에 다음 명령만 입력하면 됩니다.
$ npm install -g laravel-echo-server
설치가 완료된 후 Laravel 애플리케이션을 열거나 새 테스트 프로젝트를 시작하세요:
$ composer create-project --prefer-dist laravel/laravel echo-test
다음으로 애플리케이션용 Predis를 설치하세요.
$ composer require predis/predis
설치가 완료된 후 프로젝트 루트 디렉터리로 전환하고 소켓 서비스:
$ laravel-echo-server init
이 명령을 실행하면 소켓 서비스에 대한 일부 구성 정보를 묻는 메시지가 표시됩니다. 상황에 따라 입력할 수 있습니다.
프로덕션 환경에서는 어떤 경우에도 이를 기억하세요. 사용할 때는 개발자 모드를 꺼야 합니다.
서비스를 시작하고 제대로 실행되는지 확인할 수 있습니다:
$ laravel-echo-server start
출력은 다음과 같습니다:
Laravel Echo 서버가 제대로 작동하도록 Laravel 구성
Open your config/app.php
파일을 삭제하고 Providers 배열에서 BroadcastServiceProvider
주석을 제거하세요. 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,🎜🎜이 공급자가 시작됩니다. 라우팅(
routes/channels.php
파일에서 본 적이 있을 수 있음) 🎜🎜.env
파일을 열고 BROADCAST_DRIVER
값을 수정하세요. laravel-echo-server가 초기화될 때 정의한 값(Redis 또는 Log) 이 튜토리얼에서는 Redis 드라이버를 사용합니다. QUEUE_DRIVER
를 원하는 큐 드라이버로 수정하세요. 이 예에서는 Redis 드라이버가 이미 설치되어 실행 중이므로 쉽게 변경할 수 있습니다. 🎜🎜다음으로 Socket.io 클라이언트와 Laravel-Echo 패키지를 설치해야 합니다. 다음을 수행하여 설치할 수 있습니다: 🎜Route::get('test-broadcast', function(){ broadcast(new \App\Events\ExampleEvent); });
npm install
을 실행해야 할 수도 있습니다) 이 및 관련 종속성)🎜🎜다음으로 resources/assets/js/bootstrap.js
파일을 열거나 모든 JS 기본 코드를 소개하는 자체 JS 파일을 엽니다. 🎜🎜이제 Echo 베이스 서비스를 시작하는 코드를 추가하겠습니다. 🎜$ php artisan queue:listen --tries=1
#!/usr/bin/env bash laravel-echo-server start
App/Events
디렉토리 아래에 ExampleEvent.php
라는 이벤트 클래스가 생성됩니다.ShouldBroadcast
인터페이스에서 상속되는지 확인하세요. 🎜다음으로 아래로 스크롤하여 broadcastOn
함수를 찾아 올바른 채널에서 방송할 수 있도록 수정하세요. 🎜rrreee🎜 인스턴스 데이터를 갖도록 아래에 새 함수를 만들어 보겠습니다. 🎜rrreee🎜 이 함수는 이벤트가 호출될 때 호출되며 소켓 서비스에 데이터를 반환합니다. 🎜🎜이제 시작해 보겠습니다! routes/web.php
파일을 열고 테스트 경로를 추가하세요: 🎜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
更多编程相关知识,请访问:编程视频!!
위 내용은 Laravel-echo-server가 실시간 애플리케이션을 구축하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!