Laravel广播机制

7 篇文章 0 订阅
3 篇文章 0 订阅

广播应用场景百度一大堆就不说了,我配置时因为.env文件原因跳坑略恶心,上步骤:
event+redis+predis+laravel-echo+socket.io+queue
别忘了启动redis,laravel-echo-server,queue
bootstrap.js修改后要重编译:npm run dev

1.生成event事件:

命令:php artisan make:event EventName EventName随便起的是文件名;
在这里插入图片描述

broadcastOn()	//定义广播  Channel是公共广播  PrivateChannel是私人广播
broadcastAs()	//定义频道名	如不定义默认为当前文件名,定义后使用时前缀需加.

继承了ShouldBroadcast接口,触发事件后进行广播

2.配置驱动

在这里插入图片描述
config下的broadcasting文件
在这里插入图片描述
四种驱动:pusher,redis,log,null,我这里用的redis
注意:开发环境config配置后要去.env文件配置一下,默认先使用env文件配置
配置驱动连接:
在这里插入图片描述
圈出来的地方为连接名前缀,如不注释需使用时加上对应前缀。.env对应配置项BROADCAST_DRIVER=redis配置驱动为redis,QUEUE_CONNECTION=sync配置队列形式为同步。
注意:QUEUE_CONNECTION=database是异步队列形式加载,需要启动队列服务php artisan queue:work sync同步不需要,并发请求过大时建议异步。

3.加载驱动包

命令:composer require predis/predis
至此服务端配置完成。

4.配置客户端
加载socket.io

命令:npm install --save socket.io-client
在客户端实例化socket.io,我是将其实例化在bootstrap.js中,因为我bootstrap.js全局引用了。
在这里插入图片描述
require引入socket,broadcaster指定连接,host指定地址与端口,其余配置大多用不上,我已经注释掉。

运行一个与 Laravel 兼容的 Socket.IO 服务器

使用官方推荐的laravel-echo
下载命令:npm install laravel-echo-server -g
初始化:laravel-echo-server init
执行这条命令后,会询问你一些关于 Socket 服务的配置信息:

// 是否在开发模式下运行此服务器(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 start  //启动
laravel-echo-server stop  //停止
5.vue中订阅广播
let vue=new Vue({
	el:'xxx',
	mounted(){
                initEcho();
                Echo.channel('package//广播名').listen('.weight//频道名',(e)=>{
						//接收到数据后你的逻辑代码
				}
	}
});

广播名与频道名要与上面Event中定义的一致否则订阅不到指定频道。
注意:redis加前缀的话这里广播名也要加前缀,一般为项目名_database_广播名,频道名如果用了AS别名前缀需要加一个.,如果非队列同步情况下需要启动队列服务。

服务器上配置laravel-echo-server时https需要将证书路径配置在laravel-echo中,http需要解决跨域问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值