首頁 > php框架 > Laravel > 主體

詳解Laravel-echo-server怎麼搭建即時應用

青灯夜游
發布: 2022-02-11 19:40:55
轉載
3424 人瀏覽過

下面由Laravel教學專欄為大家介紹一下使用 Laravel-echo-server 建立即時應用的方法,希望對大家有幫助!

詳解Laravel-echo-server怎麼搭建即時應用

在我看來,即時通訊才是 APP 應用的未來。 Socket  服務通常不是那麼容易實現,但是 Laravel Echo 服務改變了這個情況。

在本文中,我將會簡要的介紹如何建立一個可以運行的 Socket 服務並且在這個服務上進行事件的廣播。 (https://github.com/tlaverdure/laravel-echo-server, Laravel 的支援文件: https://learnku.com/docs/laravel/5.6/broadcasting#driver-prerequisites)

它是完全免費的,你只要運行你自己的Socket 服務。你也可以使用 Laravel 預設整合的 Pusher ,唯一的缺點是它是有限制的,如果超出限制則需要付費。我比較喜歡自己來架構這些東西。

要求:

  • Laravel 框架(本教學使用了5.6 版本)
  • Redis 服務
  • 基本的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
登入後複製

安裝完成後,切換到專案根目錄下,初始化Socket 服務:

 $ laravel-echo-server init
登入後複製

執行這條命令後,會詢問你一些關於Socket 服務的配置信息,你可以根據自己的情況填寫:

詳解Laravel-echo-server怎麼搭建即時應用

#記得在生產環境中,無論你何時使用它,都應該關掉你的開發者模式。

我們可以嘗試啟動服務,看看它是否正常運作:

$ laravel-echo-server start
登入後複製

輸出結果看起來像這樣:

詳解Laravel-echo-server怎麼搭建即時應用

設定Laravel 讓Laravel Echo Server 正常運作

打開你的 config/app.php 檔案並且取消BroadcastServiceProvider 在這個Providers 陣列中的註解:

##App\Providers\BroadcastServiceProvider::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 檔案並且新增一個測試路由:

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 服务上。返回到我们的第一个页面,打开浏览器控制台,应该可以看到类似信息:

詳解Laravel-echo-server怎麼搭建即時應用

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

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

詳解Laravel-echo-server怎麼搭建即時應用

现在你已经安装并运行了一个基本的 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中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板