Laravel学习笔记 广播_数据库
composer require predis/predis
- 设置.env文件,修改广播驱动
BROADCAST_DRIVER=redis
- 设置.env文件,修改
QUEUE_DRIVER=redis
(使用到了redis队列) - 开启 config/app.php
App\Providers\BroadcastServiceProvider::class
- 生成event
artisan make:event
- 在事件中实现ShouldBroadcast接口,
implements ShouldBroadcast
- 编辑广播内容以及频道
publicfunction__construct($content){$this->content=$content;}publicfunctionbroadcastOn(){returnnewPrivateChannel('test_chat');}
- 安装客户端,使其与redis广播配对,
cnpm install --save
- 安装laravel-echo-server(因为Laravel 官方并没有内置 服务器实现;不过,可以选择一个由社区驱动维护的项目 tlaverdure/laravel-echo-server )
cnpm install -g laravel-echo-server
(不知道为什么,用npm会安装其他鬼东西,所以请用cnpm) - 如果laravel安装在虚拟机上的话,需要在.env中追加以下内容
LARAVEL_ECHO_SERVER_REDIS_HOST=192.168.10.10LARAVEL_ECHO_SERVER_REDIS_PORT=6379
- 配置客户端 resources/js/bootstrap.js
import Echo from "laravel-echo"
window.io =require('');
window.Echo=newEcho({
broadcaster:'',
host: window.location.hostname +':6001'});
- 设置客户端监听广播
window.Echo.channel('countryside').listen('Free',(e)=>{
console.log(e);});
- 启动 Laravel Queue Worker
$ php artisan queue:work
- 启动 Laravel-echo-server
$ laravel-echo-server start
- 在这个过程中遇到了这样一个问题
登陆网站后,控制台疯狂跳503错误,表示跨域问题
研究了一天多后发现是laravel-echo-server的配置问题(真坑)。。。而不是所谓的跨域问题(其实有503报错,但是注意力被跨域错误吸引了)
因为是使用homestead搭载服务器的,homestead上的代码映射到本地文件夹,
而本地使用phpstorm关联本地的文件夹里的项目进行开发。
在phpstorm执行laravel-echo-server start后,其关联的是本地域名服务器
而并非homestead上的服务器
但是前台请求的时候请求的是host: window.location.hostname + ':6001'
,即当前域名 :6001(这个域名是挂载在虚拟机上的,也就是 )
导致请求地址和laravel-echo-server服务器的地址对不上,从而出现了503问题
解决方法有两个:
- 如上图,将请求地址改为localhost(但是这种只是临时用的,只能用于本地测试,生产环境百分百出问题)
- 老老实实的把laravel-echo-server安装到homestead上,并在homestead上启动.
THE END