聊聊laravel7.0的广播机制,总有你想要的!
发布时间 - 2021-07-28 00:00:00 点击率:次laravel7.0广播机制(Redis + socket.io)
广播服务提供者
在广播任意事件之前,首先需要注册app\providers\broadcastserviceprovider。在新安装的 laravel 应用中,你只需要取消 config/app.php 配置文件中 providers 数组内对应服务提供者之前的注释即可。该提供者允许你注册广播授权路由和回调
相关栏目教程推荐:《laravel教程》
设置 Redis 连接
需要修改 .env 文件中的广播驱动为 redis:
BROADCAST_DRIVER=redis
建立 Event
php artisan make:event OrderShipped
执行上诉命令之后 app 目录下会出现一个 Events 目录,在该目录下产生了广播事件类 OrderShipped.php。我们要对自动生成的 OrderShipped 类进行以下修改
增加对 ShouldBroadcast 的实现
修改 broadcastOn 方法,使用公共广播通道 orderStatus
自定义广播的消息名(非必须)【默认情况下,Laravel 会使用事件的类名来广播事件,不过,你可以通过在事件中定义 broadcastAs 方法来自定义广播名称:】
修改构造函数
完整修改如下 可直接替换
id = $id;
}
//自定义广播的消息名
public function broadcastAs()
{
return 'anyName';
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new Channel('orderStatus');
}
}设置 api 路由
Route::get('/ship', function (Request $request) {
$id = $request->input('id');
broadcast(new OrderShipped($id)); // 触发事件
return 'Order Shipped!';
});安装前端脚手架
composer require laravel/uiphp artisan ui vue --auth
Redis
因为咱们使用 Redis 广播,需要安装 Predis 库:
composer require predis/predis
Redis 广播使用 Redis 的 pub/sub 功能进行广播;不过,你需要将其和能够接受 Redis 消息的 Websocket 服务器进行配对以便将消息广播到 Websocket 频道
当 Redis 广播发布事件时,事件将会被发布到指定的频道上,传递的数据是一个 JSON 格式的字符串,其中包含了事件名称、负载数据 data、以及生成事件 socket ID 的用户
安装 laravel-echo-server 订阅 Redis Sub
如果使用 pusher 那么直接使只用 laravel 就可以了,如果使用 Redis + socket.io 则需要使用开源项目 laravel-echo-server 。所以我们现在要使用 laravel-echo-server
全局安装
npm install -g laravel-echo-server
初始化 laravel-echo-server
laravel-echo-server init // 是否在开发模式下运行此服务器(y/n) 输入y ? Do you want to run this server in development mode? (y/N)// 设置服务器的端口 默认 6001 输入 6001就可以了 或者你想要的 ? Which port would you like to serve from? (6001)// 想用的数据库 选择 redis ? Which database would you like to use to store presence channel members? (Use arrow keys)❯ redis sqlite // 这里输入 你的laravel 项目的访问域名 ? Enter the host of your Laravel authentication server. (http://localhost)// 选择 网络协议 http ? Will you be serving on http or https? (Use arrow keys)❯ http https // 您想为HTTP API生成客户端ID/密钥吗 N ? Do you want to generate a client ID/Key for HTTP API? (y/N)// 要设置对API的跨域访问吗?(y/n)N Configuration file saved. Run laravel-echo-server start to run server. //您希望将此配置另存为什么? (laravel-echo-server.json)回车就行 ? What do you want this config to be saved as? (laravel-echo-server.json)
启动 laravel-echo-server
laravel-echo-server start
- 成功启动后会输出以下日志
L A R A V E L E C H O S E R V E R version 1.6.0 ⚠ Starting server in DEV mode... ✔ Running at localhost on port 6001 ✔ Channels are ready. ✔ Listening for http events... ✔ Listening for redis events... Server ready!
测试广播
在浏览器上执行 http://yourhost/api/ship?id=16
Channel: laravel_database_orderStatus Event: anyName
- laravel-echo-server 连接成功!
安装 laravel-echo 的前依赖
由于前端使用的是 laravel-echo来收听广播,我们选择的底层实现方式是socket.io。所以首先我们要在package.json中添加 laravel-echo 和 socket.io的依赖
npm i --save socket.io-client npm i --save laravel-echo
编辑 resource/js/bootstrap.js 添加如下代码
import Echo from "laravel-echo";
window.io = require("socket.io-client");
window.Echo = new Echo({
broadcaster: "socket.io",
host: window.location.hostname + ":6001"
});
测试页面
在 resources/views/ 下建立页面 test.blade.php 内容为
News Room
News Room
js 代码的意思是收听 news 通道内的 News 事件对象,将接收到的事件在控制台打印出来。
基本构建
npm install && npm run watch
相关推荐:最新的五个Laravel视频教程
# php
# laravel
# json
# bootstrap
# echo
# Resource
# 构造函数
# 字符串
# Event
# JS
# 对象
# 事件
# redis
# http
# websocket
# 自定义
# 要使
# 就可以
# 的是
# 是一个
# 目录下
# 你可以
# 将会
# 将其
# 要在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何确保FTP站点访问权限与数据传输安全?
如何在新浪SAE免费搭建个人博客?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel怎么为数据库表字段添加索引以优化查询
QQ浏览器网页版登录入口 个人中心在线进入
浅谈redis在项目中的应用
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
用v-html解决Vue.js渲染中html标签不被解析的问题
如何构建满足综合性能需求的优质建站方案?
Python正则表达式进阶教程_复杂匹配与分组替换解析
如何用JavaScript实现文本编辑器_光标和选区怎么处理
在Oracle关闭情况下如何修改spfile的参数
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Laravel怎么清理缓存_Laravel optimize clear命令详解
海南网站制作公司有哪些,海口网是哪家的?
Laravel如何自定义分页视图?(Pagination示例)
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
详解jQuery中基本的动画方法
EditPlus中的正则表达式实战(5)
浅谈javascript alert和confirm的美化
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
如何确保西部建站助手FTP传输的安全性?
如何选择PHP开源工具快速搭建网站?
Swift中switch语句区间和元组模式匹配
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
Python文件异常处理策略_健壮性说明【指导】
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
如何续费美橙建站之星域名及服务?
jQuery validate插件功能与用法详解
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
Linux安全能力提升路径_长期防护思维说明【指导】
IOS倒计时设置UIButton标题title的抖动问题
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
如何在景安云服务器上绑定域名并配置虚拟主机?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
如何在香港服务器上快速搭建免备案网站?
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
米侠浏览器网页图片不显示怎么办 米侠图片加载修复


认 6001 输入 6001就可以了 或者你想要的
? Which port would you like to serve from? (6001)// 想用的数据库 选择 redis
? Which database would you like to use to store presence channel members? (Use arrow keys)❯ redis
sqlite
// 这里输入 你的laravel 项目的访问域名
? Enter the host of your Laravel authentication server. (http://localhost)// 选择 网络协议 http
? Will you be serving on http or https? (Use arrow keys)❯ http
https
// 您想为HTTP API生成客户端ID/密钥吗 N
? Do you want to generate a client ID/Key for HTTP API? (y/N)// 要设置对API的跨域访问吗?(y/n)N
Configuration file saved. Run laravel-echo-server start to run server.
//您希望将此配置另存为什么? (laravel-echo-server.json)回车就行
? What do you want this config to be saved as? (laravel-echo-server.json)