成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于 Redis驅(qū)動(dòng)的 Laravel 事件廣播

fantix / 1069人閱讀

摘要:一前言之前在項(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.js

import 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)建要推送的事件,舉例TestEvent
3.6.1 生成事件
  php artisan make:event EventChanged    
3.6.2 廣播事件需要實(shí)現(xiàn)ShouldBrodcast接口
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)
3.8.1 整個(gè)環(huán)境還需要注意的一些配置項(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)

3.8.2 如果采用database驅(qū)動(dòng)隊(duì)列的話首先要運(yùn)行

php artisan queue:table生成jobs表遷移

php artisan migrate 執(zhí)行遷移

運(yùn)行隊(duì)列 php artisan queue:work

3.8.3 需要手動(dòng)開啟的服務(wù)(均在項(xiàng)目的根目錄下執(zhí)行)

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

相關(guān)文章

  • Laravel 即時(shí)應(yīng)用一種實(shí)現(xiàn)方式

    摘要:即時(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)...

    NeverSayNever 評論0 收藏0
  • 基于Model Event模型事件Laravel實(shí)時(shí)APP

    摘要:重點(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...

    afishhhhh 評論0 收藏0
  • 簡單 16步走一遍 Laravel Echo 使用

    摘要:在國內(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...

    chavesgu 評論0 收藏0
  • Laravel5.1 事件廣播(Event Broadcasting)

    摘要:本文會(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)作...

    yiliang 評論0 收藏0

發(fā)表評論

0條評論

fantix

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<