以前在项目中须要使用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>
差很少上面就是全部的过程和步骤了,不知道有没有很清楚。若是有能够帮到你们的地方,那就达到我写这篇文章的目的了。