当前位置: 首页 > 后端技术 > PHP

Redis驱动的Laravel事件广播

时间:2023-03-30 05:35:48 PHP

1.前言之前在项目中需要使用laravel的事件广播,项目打算使用redis作为驱动,但是发现网上大部分资料都是Pusher驱动的,所以我必须自己弄清楚创建了一个服务。现在把这个过程记录下来,希望能帮助到别人。2.项目的环境事件广播需要用到redis和nodejs。不同的版本在安装过程中会遇到一些问题。有兴趣的可以看看我之前提到的一个问题:npminstall报错。以下是我开发时的环境:laravel5.3nodev6.11.4redis3.0.5003.具体搭建过程其实官方文档中已经给出了大概的步骤,laravel5.3官方文档广播系统,我会这里不说,只把整体的过程写下来~3.1取消config/app.config中AppProvidersBroadcastServiceProvider::class的注释3.2安装Predisextensioncomposerrequirepredis/predis;3.3安装laravel-echo-servernpminstall-glaravel-echo-server然后需要添加这个服务Initialize,laravel-echo-serverinit按照提示一步步初始化'socket.io',host:window.location.hostname+':6001'//一定不能使用127.0.0.1(因为这个地方使用127.0.0.1时,其他人访问时会找到自己的host,而不是服务器的host)});//要监听的通道名称和要执行的操作window.Echo.channel('user1').listen('EventChanged',(e)=>{console.log(e.name);//例如,我要输出传过来的人的名字});3.5编译app.js文件由于此时app.js还没有编译,所以需要编译。编译需要gulp,所以先安装node包——npminstall(根目录下会生成node_modules文件夹)——npminstall在安装过程中可能会遇到问题:如果在安装过程中遇到deprecategulp@3.9.1?vinyl-fs@0.3.14?glob-stream@3.1.18?minimatch@^2.0.1执行npmupdate-gminimatch@3.0.2npmupdate-gminimatch@3.0.2-运行命令:gulp-watch或npmrundev编译这个js,这时候会报错,无法解析laravel-echo,解决方法:npminstalllaravel-echo至此,基本上laravel-echo-server的服务已经基本搭建好了,现在做其他工作3.6创建要推送的事件,例如TestEvent3.6.1生成事件phpartisanmake:eventEventChanged3.6.2广播事件需要实现ShouldBrodcast接口类EventChangedimplementsShouldBroadcastdefinestobroadcasttowhichchannelinbroadcastonpublicfunctionbroadcastOn(){返回新陈nel('user1');//比如向user1广播}当定义了一个事件时,它的所有公共属性都会被序列化并作为广播信息发送到指定的频道。//自定义在broadcastWith中广播哪些信息publicfunctionbroadcastWith(){return['name'=>'jack'];}在app/provider/BrodcastServiceProvider的boot中设置广播频道授权(返回true代表授权通过)Broadcast::channel('user1',function(){returntrue;//授权逻辑判断即可写到这里,我这里直接返回true,不验证});3.7引入前端页面js在你的前端页面引入编译好的js文件和socket.io文件//注意这两个文件的导入顺序3.8需要配置的一些配置项3.8.1一些整个环境需要注意的配置项:.env文件中的broadcastdriver=redis//因为使用了redis驱动,所以需要在'default'中设置QUEUE_DRIVER=>env('BROADCAST_DRIVER','redis').env文件在appconfigbroadcasting.php中,代表队列的驱动方式,因为事件广播是把事件抛到默认队列中进行推送,所以这里有两种设置方式(参考相关文档laravelqueuefordetails):1.QUEUE_DRIVER=sync//这个代表本地驱动,如果采用这个设置的话就没办法了2.QUEUE_DRIVER=database//这里代表使用数据库驱动3.8.2如果使用数据库驱动queue,首先运行phpartisanqueue:table生成jobs表迁移phpartisanmigrate执行迁移runqueuephpartisanqueue:work3.8.3服务需要手动启动(都在项目根目录下执行)redis-server.exe(启动redis服务,一定要启动)laravel-echo-serverstart(启动socket服务)4.总结了上面几乎所有的流程和步骤,不知道有没有说清楚的地方能帮到大家,那么我写这篇文章的目的就达到了。