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