Laravel 广播
请忽略排版
git地址 :https://git.dev.tencent.com/JunyAn-CYW/test1.porygon.cn.git 腾讯云开发者平台的
参考文章: laravel社区的广播系统文档 Laravel Redis 广播 实例
如有侵权 请联系 本人会尽快修正
描述
laravel 6.0是LTS 版 当然是先学为敬(笑) 在此记录一下在学习广播这一部分的时候编写的代码和遇到一些文题
正文
本文所用测试项目使用:
redis作为队列和广播驱动
Socket.io作为websocket服务器进程
若想使用其他驱动请查阅相关文档, 不过总体而言,大同小异
首先
Laravel6.0 的教程在本文编写的时候已经有了相关的中文文档和教程, laravel6.0 作为LTS版本 未来几年都可以算是一直用.
但是文档像是简单的将英文文档翻译过来, 所以在学习的过程(至少在广播这一块)中感觉有的东西跳跃的有点大,.
所以在此, 本文将会以laravel社区的广播系统文档结合这篇文章 再添加一些补充, 以redis 作为驱动简单实现一个广播功能
初始化项目及安装相关的包可以参考上述文档 下面会列出需要用到的命令 并在后面介绍用途
//项目根目录下运行
composer require predis/predis
npm install --save laravel-echo//创建广播事件
php artisan make:event BroadcastName//服务器上运行
npm install -g laravel-echo-server
laravel-echo-server init
laravel-echo-server start//开启队列任务
php artisan queue:work
按照顺序
1 安装广播所需要的包和前端工具
composer require predis/predis
npm install --save laravel-echo
2 创建广播事件
php artisan make:event DemoBroadcastName
3 填充广播事件
广播Event 要继承ShouldBroadcast接口并至少实现broadcastOn 方法 此方法返回一个要广播的频道实例, 本文以最简单的实现方式为例 若要进行复杂设定可查阅文档 以下是DemoBroadcastName类的全部内容
class DemoBroadcastName implements ShouldBroadcast
{use Dispatchable, InteractsWithSockets, SerializesModels;// 消息内容public $message;public function __construct(string $message){$this->message = $message;}//返回要接入的频道public function broadcastOn(){// 返回一个公共频道 频道名称为pushreturn new Channel('push');}// Laravel 默认会使用事件的类名作为广播名称来广播事件,自定义:public function broadcastAs(){return 'push.message';}
}
4 创建一个前端接收页面
result.blade.php
编辑 resource/js/bootstrap.js 添加如下代码
import Echo from "laravel-echo"window.Echo = new Echo({broadcaster: 'socket.io',host: window.location.hostname + ':6001'
});
这段代码是声明一个全局对象Echo
然后运行
npm run dev
编译源文件,在result.blade.php中, 添加以下代码
<script>
Echo.channel('laravel_database_push')
.listen('.push.message', (e) => {console.log(e);
});
</script>
注: 加入的频道名是 laravel_database_push 和 广播事件里返回的 频道名push 不同是因为 laravel6.0 默认会给使用redis驱动的程序加上一个前缀 具体配置在config/database,php的redis配置里
并保证在此端代码之前至少引用了
<script src="{{ env('APP_URL',Request::getHost()) }}:6001/socket.io/socket.io.js"></script><script src="{{ asset("js/app.js") }}"></script>
5 创建结果页面路由和广播消息路由 和 测试用控制器
直接写闭包也可以, 可以,但是没必要 别问为什么 不喜欢
Route::get('result', "DemoController@getResultPage")->name("ceshi_result");Route::get('broadcast/{value}', 'DemoController@broadcast')->name("ceshi_broadcast");
控制器的两个方法实现也很简单:
public function getResultPage(Request $request)
{return view("result");
}
public function broadcast(Request $request, $value)
{broadcast(new PublicMessageEvent($value));dd($value);
}
检查页面无误后部署到测试用的服务端, 由于使用了redis 建议在homestead或自己配置的虚拟机里测试, 由于我的电脑配置较低,所以直接部署在服务器进行测试的 传送门
到服务器端 打开ssh 登陆后运行
npm install -g laravel-echo-server
laravel-echo-server init
laravel-echo-server start
安装、初始化并开启 laravel-echo-server
初始化时的选项这里复制这篇文章 的内容
打开laravel-echo-server后还需要打开队列才行
php artisan queue:work --tries=10
然后在浏览器打开接收页 若是连接成功服务端laravel-echo-server 会有如下joined的提示
在另一个新标签里输入
http(s)://域名/broadcast/想广播的字符串
并回车,服务端laravel-echo-server 有如下红框内的提示则表示广播成功
如果 joined channel 后面的频道名和Channel 后面的频道名相同,且接收页里监听的事件名与Event后面的事件名相同 讲道理应该就是成功了 效果如下:
至此, 一个简单的Demo就做完了
总结
遇到的坑来说 有两个
1 队列不能忘记打开
2 接收页添加的频道名要注意前缀问题
以及, 如果不想用socket.io 也可自行通过websocket 实现(我还不会)
如果有其他问题欢迎留言交流
Laravel 广播相关推荐
- echo 多行_分享laravel-echo-server广播服务搭建-Laravel
下面由Laravel教程栏目给大家介绍laravel-echo-server广播服务搭建,希望对需要的朋友有所帮助! 动机 当前项目中很多场景采用 Redis 队列和定时任务来处理执行时间较长的任务, ...
- laravel入门教程
laravel 入门教程 laravel 简介 laravel['lærəvel] : 读作 拉瑞涡. laravel 教程 laravel 简介及资料 laravel 安装,配置,以及部署 lara ...
- Laravel 的事件广播系统(Redis驱动)
需求 给当前在线浏览用户推送优惠券,或者刺激用户消费的话术 今天我们主要是借助Laravel Broadcasting你可以使用上时下很热的Websocket技术 解决方案 1 . 基于laravel ...
- laravel6中使用广播推送消息
使用laravel广播推送消息 项目是基于laravel6开发的一个论坛项目,里面有公告和私信功能,需求要求做到实时推送 方案 使用php socket 搭建 使用laravel自带的广播 php s ...
- 2021-03-23 - 高性能 Redis 实战
1.应用场景 主要用于学习Redis 底层实现,编程思想,以及可参考借鉴的技术, 同时在日常开发中如何高效实践高性能 Redis服务. 2.学习/操作 1.文档阅读 高性能 Redis 实战 | La ...
- laravel broadcas广播
本篇大部分是借鉴alexxiyang 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/nsrainbow/article/details/80428769?utm_so ...
- vue php聊天室,实时聊天室:基于Laravel+Pusher+Vue通过事件广播实现
之前有说过要整理出一篇事件广播的教程,今天终于有时间把这篇文章给写了出来,本次的教程是基于Laravel+Pusher+Vue,以事件广播作为核心技术,让你可以快速搭建起一个实时聊天室应用,话不多说, ...
- php pusher,php – Pusher没有接收来自Laravel 5.2广播的事件
我正在使用Laravel 5.2和php 7.我在本地Mac OSX环境中测试它.我没有麻烦ping其他服务或用 PHP发出请求.我通过使用api详细信息编辑broadcast.php和.env来配置 ...
- pusher 创建新应用_基于 Laravel + Pusher + Vue 通过事件广播构建实时聊天室应用
基于 Laravel + Pusher + Vue 通过事件广播构建实时聊天室应用 由 学院君 创建于2年前, 最后更新于 3个月前 版本号 #3 前言:学院君之前有说过要整理出一篇事件广播手把手教程 ...
最新文章
- 2021年大数据Spark(十二):Spark Core的RDD详解
- oracle中代替in 和not in 高效方法
- HTML中INPUT type=date标签如何赋值注意问题
- 《四世同堂》金句摘抄(六)
- java 计算协方差_Java的深度:通过协方差暴露的API泄漏
- 谋而后动:解读数仓计划生成中行数估算和路径生成的奥秘
- RedEngine11
- 利用Update Manager将ESXi 5.1 Update2升级为ESXi 6.5 Update1
- 译:用iPhone SDK来画饼图(Pie Charts)报表
- 抖音记事本代码html,抖音使用教程 抖音表白代码使用方法介绍
- (转)C# 温故而知新:Stream篇(五)
- html自动补位的功能,js中位数不足自动补位扩展padLeft、padRight实现代码
- 小米云备份的正确打开方式,你学会了吗
- 支持Apple pay支付的设备
- 线程进程计算之多任务同步进行
- OpenSSL 拒绝服务、证书绕过漏洞通告
- 那些程序员之间丧心病狂的鄙视链,你在哪一层?
- linux uniq去重不生效
- 如何批量添加文件名前缀?
- 4K HDMI分配器 1路HDMI分配2路同步信号输出
热门文章
- 14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项
- 关于php页面无缘无故不能访问的一个问题
- Python库 turtlede的使用(绘制小黄人、樱花树、小猪佩奇、皮卡丘)
- 列式数据库,OLAP与OLTP
- 《自用》endnote 使用
- 调用百度大脑智能里的文字识别实现图片识别
- promise 与async awit的写法
- k8s-问题:[root@master log]# kubectl get node The connection to the server 192.168.0.105:6443 was refus
- 飞腾CPU体系结构(十)
- 飞腾CPU体系结构(十二)