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