以前在項目中須要使用laravel的事件廣播,並且項目打算使用redis做爲驅動,但發現網上的資料大部分都是Pusher驅動的,只能本身摸索着搭建了一下服務。如今將這個過程記錄一下,但願能幫到其餘人。php
事件廣播須要用到redis,nodejs,不一樣的版本在安裝過程當中會遇到一些問題,你們有興趣能夠看看我以前提過的一個問題:npm install 報錯,下面是我開發時的環境:前端
其實大概的步驟在官方文檔上已經給出來了,laravel5.3 官方文檔 廣播系統,這裏我就不講了,只把總體的流程寫下來~node
composer require predis/predis;
npm install -g laravel-echo-server 而後須要將此服務初始化, laravel-echo-server init
而後按照指引一步一步初始化就好laravel
import 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);//好比我要輸出傳過來的人名 });
因爲app.js此時還沒有進行編譯,因此須要編譯。編譯須要用到gulp,因此先安裝node的包redis
- 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 的服務基本上已經搭好了,如今進行其餘工做數據庫
php artisan make:event EventChanged
class EventChanged implements ShouldBroadcast
在broadcaston中定義要廣播到哪一個頻道npm
public function broadcastOn() { return new Channel('user1');//好比廣播到user1 }
當一個事件被定義後,其全部public屬性都將被序列化,做爲廣播的信息發送到指定頻道。
//在broadcastWith中自定義要將哪些信息廣播出去gulp
public function broadcastWith() { return ['name' => 'jack']; }
在app/provider/BrodcastServiceProvider 的boot中設置廣播的頻道受權(return 爲ture表明受權經過)segmentfault
Broadcast::channel('user1', function () { return true; //這個裏面能夠寫受權的邏輯判斷,我這裏直接返回true了,不作驗證 });
在你的前端頁面中引入編譯好的js文件,以及socket.io文件服務器
//注意這兩個文件的引入順序 <script src="http://{{Request::getHost()}}:6001/socket.io/socket.io.js"></script> <script src="js/app.js"></script>
差很少上面就是全部的過程和步驟了,不知道有沒有很清楚。若是有能夠幫到你們的地方,那就達到我寫這篇文章的目的了。