摘要:一前言之前在项目中需要使用的事件广播,而且项目打算使用作为驱动,但发现网上的资料大部分都是驱动的,只能自己摸索着搭建了一下服务。
一、前言
之前在项目中需要使用laravel的事件广播,而且项目打算使用redis作为驱动,但发现网上的资料大部分都是Pusher驱动的,只能自己摸索着搭建了一下服务。现在将这个过程记录一下,希望能帮到其他人。
二、项目的环境事件广播需要用到redis,nodejs,不同的版本在安装过程中会遇到一些问题,大家有兴趣可以看看我之前提过的一个问题:npm install 报错,下面是我开发时的环境:
laravel 5.3
node v6.11.4
redis 3.0.500
三、具体的搭建流程其实大概的步骤在官方文档上已经给出来了,laravel5.3 官方文档 广播系统,这里我就不讲了,只把整体的流程写下来~
3.1 在config/app.config中取消AppProvidersBroadcastServiceProvider::class的注释 3.2 安装Predis扩展composer require predis/predis;3.3 安装laravel-echo-server
npm install -g laravel-echo-server 然后需要将此服务初始化, laravel-echo-server init
然后按照指引一步一步初始化就好
3.4 将laravel-echo-server 服务加入到resource/asset/app.jsimport 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);//比如我要输出传过来的人名 });3.5 编译app.js文件
由于app.js此时尚未进行编译,所以需要编译。编译需要用到gulp,所以先安装node的包
- 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 的服务基本上已经搭好了,现在进行其他工作
3.6 创建要推送的事件,举例TestEventphp artisan make:event EventChanged
class EventChanged implements ShouldBroadcast
在broadcaston中定义要广播到哪个频道
public function broadcastOn() { return new Channel("user1");//比如广播到user1 }
当一个事件被定义后,其所有public属性都将被序列化,作为广播的信息发送到指定频道。
//在broadcastWith中自定义要将哪些信息广播出去
public function broadcastWith() { return ["name" => "jack"]; }
在app/provider/BrodcastServiceProvider 的boot中设置广播的频道授权(return 为ture代表授权通过)
Broadcast::channel("user1", function () { return true; //这个里面可以写授权的逻辑判断,我这里直接返回true了,不做验证 });3.7 前端页面js的引入
在你的前端页面中引入编译好的js文件,以及socket.io文件
//注意这两个文件的引入顺序3.8 一些需要配置的配置项
.env文件中的 broadcastdriver = redis // 因为使用redis驱动,所以要设置好
appconfigbroadcasting.php 中"default" => env("BROADCAST_DRIVER", "redis")
.env文件中的 QUEUE_DRIVER,这个代表了队列的驱动方式,因为事件广播将事件扔到默认队列进行推送,所以这个地方有两种设置方式(详情参照laravel队列的相关文档):
1.QUEUE_DRIVER = sync //这个代表本地驱动,如果采用这个设置的话没什么其他要操作的
2.QUEUE_DRIVER = database //这个代表采用数据库驱动
php artisan queue:table生成jobs表迁移
php artisan migrate 执行迁移
运行队列 php artisan queue:work
redis-server.exe (开启redis服务,一定要启动)
laravel-echo-server start (开启socket服务)
四、总结差不多上面就是所有的过程和步骤了,不知道有没有很清楚。如果有可以帮到大家的地方,那就达到我写这篇文章的目的了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28439.html
摘要:即时交互的应用在现代的应用中很多场景都需要运用到即时通讯,比如说最常见的支付回调,与三方登录。在生成事件时,已经自动添加了该命名空间,该契约只约束方法。会将事件中的允许公开访问的数据通过给定的频道发布出去。 即时交互的应用 在现代的 Web 应用中很多场景都需要运用到即时通讯,比如说最常见的支付回调,与三方登录。这些业务场景都基本需要遵循以下流程: 客户端触发相关业务,并产生第三方应...
摘要:重点是在页面写入新文本,页面不能实时显示。想要了解更多可以参考这篇文章基于驱动的事件广播下测试实时功能刷新页面,并观察数据库。测试实时创建功能。 说明:本文主要来源于real-time-apps-laravel-5-1-event-broadcasting 本文主要基于Laravel的Model Event介绍该框架的实时通信功能,Laravel模型的生命周期中包含事件:created...
摘要:在国内,个人还是不推荐使用,访问速度有所影响,而且其还是一个商业产品。今天利用最简便的步,走一遍代码集成和来使用。代码简单创建监听我们在后端添加一个被创建的事件,并继承。 showImg(https://segmentfault.com/img/remote/1460000015801244?w=904&h=241); 先飚几句英文,说说 Laravel Echo 的作用: One o...
摘要:本文会用简单的代码展示一个事件广播的过程。定义一个被广播的事件根据文档的说明,想让事件被广播,必须让类实现一个接口,并且实现一个方法。返回一个数组,包含了事件发送到的频道。触发事件打开另一个页面。 事件广播 简介 Laravel 5.1 之中新加入了事件广播的功能,作用是把服务器中触发的事件通过websocket服务通知客户端,也就是浏览器,客户端js根据接受到的事件,做出相应动作...
阅读 3009·2021-11-19 11:31
阅读 3088·2021-09-02 15:15
阅读 951·2019-08-29 17:22
阅读 1032·2019-08-29 16:38
阅读 2446·2019-08-26 13:56
阅读 811·2019-08-26 12:16
阅读 1388·2019-08-26 11:29
阅读 910·2019-08-26 10:12