位置: 编程技术 - 正文

Laravel构建即时应用的一种实现方法详解(laravel创建项目)

编辑:rootadmin

推荐整理分享Laravel构建即时应用的一种实现方法详解(laravel创建项目),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:laravel实战教程,laravel create,laravel实战教程,laravel create,laravel创建model,laravel create,laravel创建model,laravel create,内容如对您有帮助,希望把文章链接给更多的朋友!

即时交互的应用

大家应该都有所体会,在现代的 Web 应用中很多场景都需要运用到即时通讯,比如说最常见的支付回调,与三方登录。这些业务场景都基本需要遵循以下流程:

客户端触发相关业务,并产生第三方应用的操作(比如支付) 客户端等待服务端响应结果(用户完成第三方应用的操作) 第三方应用通知服务端处理结果(支付完成) 服务端通知客户端处理结果 客户端依据结果做出反馈 (跳转到支付成功页面)

在过去,为了实现这种即时通讯,能让客户端正确响应处理结果,最为常用的技术就是轮询,因为 HTTP 协议的单向性,客户端只能一遍一遍的主动询问服务端的处理结果。这种方式有显见的缺陷,占用服务端资源不说,还不能实时获得服务端处理结果。

现在,我们可以使用 WebSocket 协议来处理实时交互,它是一种双向协议,允许服务端主动推送信息到客户端。本篇我们将借助 Laravel 强大的事件系统来构建实时的交互。你将需要用到以下知识:

Laravel Event Redis Socket.io Node.js

Redis

在开始之前,我们需要开启一个 redis 服务,并在 Laravel 应用中进行配置启用,因为在整个流程中,我们需要借助 redis 的订阅和发布机制来实现即时通讯。

Redis 是一个开源高效的键值对存储系统。它通常作为一个数据结构服务器来存储键值对,它可以支持字符串,散列,列表,集合和有序结合。在 Laravel 中使用 Redis 你需用通过 Composer 来安装 predis/predis 包文件。

配置

Redis 在应用中的配置文件存储在 config/database.php,在这个文件中,你可以看到一个包含了 Redis 服务信息的 redis 数组:

如果你修改了 redis 服务的端口,请保持配置文件中的端口一致。

Laravel Event

这里我们需要借助 Laravel 强大的事件广播能力:

广播事件

很多现代化的应用中,会使用 Web Sockets 来实现实时交互的用户接口。当一些数据在服务端变更时,一条消息会通过 WebSocket 连接来传递到客户端进行处理。

Laravel构建即时应用的一种实现方法详解(laravel创建项目)

为了帮助你构建这种类型的应用。Laravel 使通过 WebSocket 连接进行广播事件变的非常简单。Laravel 允许你广播事件来共享事件的名称到你的服务端和客户端的 JavaScript 框架。

配置

所有的事件广播配置选项都被存储在 config/broadcasting.php 配置文件中。Laravel 附带了几种可用的驱动如 Pusher,Redis,和 Log,我们将使用 Redis 作为广播驱动,这里需要依赖 predis/predis 类库。

由于默认的广播驱动使用的是 pusher,所以我们需要在 .env 文件中设置 BROADCAST_DRIVER=redis。

我们创建一个 WechatLoginedEvent 事件类用来在用户扫描微信登录后进行广播:

其中你需要注意 broadcastOn 方法应返回一个数组,它表示所需广播的频道,而 broadcastAs 返回的是一个字符串,它表示广播所触发的事件,Laravel 默认的是返回事件类的全类名,这里是 AppEventsWechatLoginedEvent.

最重要的是你需要手动的让该类实现 ShouldBroadcast 契约。Laravel 在生成事件时,已经自动添加了该命名空间,该契约只约束 broadcastOn 方法。

事件完成接下来就是触发事件了,简单的一行代码就可以:

这个操作会自动的触发事件的执行并将信息广播出去。该广播操作底层借助了 redis 的订阅和发布机制。

RedisBroadcaster 会将事件中的允许公开访问的数据通过给定的频道发布出去。如果你想对公开的数据拥有更多的控制,你可以在事件中添加 broadcastWith 方法,它应该返回一个数组:

Node.js 和 Socket.io

对于发布出去的信息,我们需要一个服务来对接,让其能对 redis 的发布能够进行订阅,并且能把信息以 WebSocket 协议转发出去,这里我们可以借用 Node.js 和 socket.io 来非常方便的构建这个服务:

这里我们使用 Node.js 引入 socket.io 服务端并监听 端口,借用 redis 的 psubscribe 指令使用通配符来快速的批量订阅,接着在消息触发时将消息通过 WebSocket 转发出去。

Socket.io 客户端

在 web 前端,我们需要引入 Socket.io 客户端开启与服务端 端口的通讯,并订阅频道事件:

至此整个通讯闭环结束,开发流程看起来就是这样的:

在 Laravel 中构建一个支持广播通知的事件 设置需要进行广播的频道及事件名称 将广播设置为使用 redis 驱动 提供一个持续的服务用于订阅 redis 的发布,及将发布内容通过 WebSocket 协议推送到客户端 客户端打开服务端 WebSocket 隧道,并对事件进行订阅,根据指定事件的推送进行响应。

总结

标签: laravel创建项目

本文链接地址:https://www.jiuchutong.com/biancheng/289961.html 转载请保留说明!

上一篇:PHP下 Mongodb 连接远程数据库的实例代码(php+mongodb)

下一篇:laravel如何开启跨域功能示例详解(laravel技巧)

  • 以土地投资入股是否需要缴纳增值税
  • 国际运输需要办什么证
  • 无发票的费用怎样补交所得税
  • 门票可以直接入账吗
  • 工资表领导签字怎么签
  • 客人受伤赔偿协议书范本
  • 2019小微企业10万免税需要如何办理
  • 汇算清缴调增的金额,如何做会计分录
  • 当月没有发生购销合同还要报印花税吗
  • 企业基本医疗保险和综合医疗保险
  • 电梯合同属于什么合同
  • 长期投资包括哪些会计科目
  • 调增企业所得税怎么算
  • 保证金转租金的会计处理
  • 食堂收入支出结构图
  • 支付股东借款利息怎么交税
  • 周转材料低值易耗品
  • 增值税专用发票的税率是多少啊
  • 开票方与受票方的区别
  • 退休人员返聘后辞退怎样补偿
  • 汽车装饰用品大全进货
  • 房租收入如何结转成本
  • 调整利润分配期怎么计算
  • 股权更改需要什么费用
  • 分项结转法怎么结转
  • 企业购车按揭产生的费用
  • 增值税留抵税额在借方还是贷方
  • php中删除文件的函数
  • 其他综合收益属于什么科目借贷
  • thinkphp uuid
  • 离退休干部书报费有关文件
  • 销售自己使用过的旧货
  • uniapp怎么开启路由拦截
  • 企业固定资产可以按照其价值和使用情况,确定采用某一
  • echarts中国地图代码
  • php读取excel数据
  • 用人单位招用失业人员补贴
  • lsmod命令结果详解
  • 对企业采取以旧换新方式销售的应税产品
  • 年末应交税费怎么算
  • 筹办期间发生的广告费和业务宣传费可以扣除吗
  • SQLite教程(三):数据表和视图简介
  • 资产报废的原因及情况说明
  • 转出未交增值税最终怎么转平
  • 哪几种进项税额允许抵扣
  • 填制和审核会计凭证,可以监督各项经济业务的合法
  • 房地产销售老项目增值税
  • 购买原材料没有发票能入库吗
  • 暂估入账应该如何操作
  • 为什么车船税没有发票
  • 购买的税控盘可以全额抵扣,怎么报
  • 国债利息收入企业所得税调增
  • 期初借款余额计算公式
  • 咨询服务费计入哪里
  • 不开票收入怎么做账
  • 重要性水平如何判断
  • 固定资产如何管理
  • 应付利息属于经营性负债吗
  • ubuntu怎么用
  • 老毛桃u盘启动盘制作工具怎么安装win10系统 老毛桃u盘安装win10系统图文教程
  • 用iTunes更新iPhone结果盘容量一直减少
  • Centos 6.4 64位版命令行下设置无线网卡教程
  • saimon.exe - saimon进程有什么用 有何作用
  • ios平台中glsl中shadow2DProjEXT函数的简单说明以及变换矩阵的小注意点
  • opengles入门
  • jquery 下拉框变更事件
  • ja开发
  • 你知道python不
  • tbc背包插件
  • jquery 鼠标
  • jquery 修改
  • javascript面向对象吗
  • animate如何拖动图片
  • 国家税务12366电子税务局重庆
  • 税务征收津贴发放范围
  • 增值税一般纳税人资格登记表
  • 光伏发电备案证如何办理
  • 沈阳市房产契税查询
  • 党员e先锋中的支部云课堂在哪
  • 全国税收总收入完成59260.61
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设