摘要:一前言之前在項目中需要使用的事件廣播,而且項目打算使用作為驅動,但發現網上的資料大部分都是驅動的,只能自己摸索著搭建了一下服務。
一、前言
之前在項目中需要使用laravel的事件廣播,而且項目打算使用redis作為驅動,但發現網上的資料大部分都是Pusher驅動的,只能自己摸索著搭建了一下服務。現在將這個過程記錄一下,希望能幫到其他人。
二、項目的環境事件廣播需要用到redis,nodejs,不同的版本在安裝過程中會遇到一些問題,大家有興趣可以看看我之前提過的一個問題:npm install 報錯,下面是我開發時的環境:
laravel 5.3
node v6.11.4
redis 3.0.500
三、具體的搭建流程其實大概的步驟在官方文檔上已經給出來了,laravel5.3 官方文檔 廣播系統,這里我就不講了,只把整體的流程寫下來~
3.1 在config/app.config中取消AppProvidersBroadcastServiceProvider::class的注釋 3.2 安裝Predis擴展composer require predis/predis;3.3 安裝laravel-echo-server
npm install -g laravel-echo-server 然后需要將此服務初始化, laravel-echo-server init
然后按照指引一步一步初始化就好
3.4 將laravel-echo-server 服務加入到resource/asset/app.jsimport Echo from "laravel-echo" window.Echo = new Echo({ broadcaster: "socket.io", host: window.location.hostname + ":6001" //一定不能用127.0.0.1(因為這個地方用127.0.0.1的時候,其他人訪問的時候會找自己的主機,而不是服務器的主機) }); //這里放要監控的頻道名,以及要進行的操作 window.Echo.channel("user1").listen("EventChanged", (e) => { console.log(e.name);//比如我要輸出傳過來的人名 });3.5 編譯app.js文件
由于app.js此時尚未進行編譯,所以需要編譯。編譯需要用到gulp,所以先安裝node的包
- npm install (會在根目錄下產生node_modules文件夾) - npm install安裝過程中可能會遇到問題: 安裝過程中如果遇到 deprecate gulp@3.9.1 ? vinyl-fs@0.3.14 ? glob-stream@3.1.18 ? minimatch@^2.0.1 執行 npm update -g minimatch@3.0.2npm update -g minimatch@3.0.2就可以 - 運行命令:gulp -watch或者npm run dev 將此js編譯,此時會報錯,can"t resolve laravel-echo,解決方法:npm install laravel-echo
到此為止,基本上laravel-echo-server 的服務基本上已經搭好了,現在進行其他工作
3.6 創建要推送的事件,舉例TestEventphp artisan make:event EventChanged
class EventChanged implements ShouldBroadcast
在broadcaston中定義要廣播到哪個頻道
public function broadcastOn() { return new Channel("user1");//比如廣播到user1 }
當一個事件被定義后,其所有public屬性都將被序列化,作為廣播的信息發送到指定頻道。
//在broadcastWith中自定義要將哪些信息廣播出去
public function broadcastWith() { return ["name" => "jack"]; }
在app/provider/BrodcastServiceProvider 的boot中設置廣播的頻道授權(return 為ture代表授權通過)
Broadcast::channel("user1", function () { return true; //這個里面可以寫授權的邏輯判斷,我這里直接返回true了,不做驗證 });3.7 前端頁面js的引入
在你的前端頁面中引入編譯好的js文件,以及socket.io文件
//注意這兩個文件的引入順序3.8 一些需要配置的配置項
.env文件中的 broadcastdriver = redis // 因為使用redis驅動,所以要設置好
appconfigbroadcasting.php 中"default" => env("BROADCAST_DRIVER", "redis")
.env文件中的 QUEUE_DRIVER,這個代表了隊列的驅動方式,因為事件廣播將事件扔到默認隊列進行推送,所以這個地方有兩種設置方式(詳情參照laravel隊列的相關文檔):
1.QUEUE_DRIVER = sync //這個代表本地驅動,如果采用這個設置的話沒什么其他要操作的
2.QUEUE_DRIVER = database //這個代表采用數據庫驅動
php artisan queue:table生成jobs表遷移
php artisan migrate 執行遷移
運行隊列 php artisan queue:work
redis-server.exe (開啟redis服務,一定要啟動)
laravel-echo-server start (開啟socket服務)
四、總結差不多上面就是所有的過程和步驟了,不知道有沒有很清楚。如果有可以幫到大家的地方,那就達到我寫這篇文章的目的了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28439.html
摘要:即時交互的應用在現代的應用中很多場景都需要運用到即時通訊,比如說最常見的支付回調,與三方登錄。在生成事件時,已經自動添加了該命名空間,該契約只約束方法。會將事件中的允許公開訪問的數據通過給定的頻道發布出去。 即時交互的應用 在現代的 Web 應用中很多場景都需要運用到即時通訊,比如說最常見的支付回調,與三方登錄。這些業務場景都基本需要遵循以下流程: 客戶端觸發相關業務,并產生第三方應...
摘要:重點是在頁面寫入新文本,頁面不能實時顯示。想要了解更多可以參考這篇文章基于驅動的事件廣播下測試實時功能刷新頁面,并觀察數據庫。測試實時創建功能。 說明:本文主要來源于real-time-apps-laravel-5-1-event-broadcasting 本文主要基于Laravel的Model Event介紹該框架的實時通信功能,Laravel模型的生命周期中包含事件:created...
摘要:在國內,個人還是不推薦使用,訪問速度有所影響,而且其還是一個商業產品。今天利用最簡便的步,走一遍代碼集成和來使用。代碼簡單創建監聽我們在后端添加一個被創建的事件,并繼承。 showImg(https://segmentfault.com/img/remote/1460000015801244?w=904&h=241); 先飚幾句英文,說說 Laravel Echo 的作用: One o...
摘要:本文會用簡單的代碼展示一個事件廣播的過程。定義一個被廣播的事件根據文檔的說明,想讓事件被廣播,必須讓類實現一個接口,并且實現一個方法。返回一個數組,包含了事件發送到的頻道。觸發事件打開另一個頁面。 事件廣播 簡介 Laravel 5.1 之中新加入了事件廣播的功能,作用是把服務器中觸發的事件通過websocket服務通知客戶端,也就是瀏覽器,客戶端js根據接受到的事件,做出相應動作...
閱讀 3043·2021-11-19 11:31
閱讀 3127·2021-09-02 15:15
閱讀 984·2019-08-29 17:22
閱讀 1057·2019-08-29 16:38
閱讀 2463·2019-08-26 13:56
閱讀 832·2019-08-26 12:16
閱讀 1434·2019-08-26 11:29
閱讀 928·2019-08-26 10:12