环境
laravel框架版本:7.3;
npm版本:8.5.5;
node版本:v16.15.0;
本文中 仅使用了 redis 的广播驱动
简介
laravel
的广播系统和队列系统类似,需要两个进程协作,一个是 laravel
的 web
后台系统,另一个是 Socket.IO
服务器系统。具体的流程是页面加载时,网页 js
程序 Laravel Echo
与 Socket.IO
服务器建立连接, laravel
发起通过驱动发布广播,Socket.IO
服务器接受广播内容,对连接的客户端网页推送信息,以达到网页实时更新的目的。
配置
配置文件 config/broadcasting.php
,可以直接在 .env
中配置以下代码
BROADCAST_DRIVER=redis
Tip:队列驱动也要设置为
redis
,即在.env
中把QUEUE_CONNECTION
属性值改为redis
广播服务提供者
config/app.php
配置文件中 providers
数组中打开注释
'providers' => [
/*
* Laravel Framework Service Providers...
*/
...
...
...
/*
* Package Service Providers...
*/
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// 把下面这个服务提供者(BroadcastServiceProvider)的注释给去掉
App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],
CSRF 令牌
Laravel Echo
需要访问当前 Session
的 CSRF 令牌(token
)
在创建的 blade
视图的 head
中 都要加入 meta
标签里
<meta name="csrf-token" content="{
{ csrf_token() }}">
Redis
Redis
广播需要安装 Predis
库
composer require predis/predis
安装 Laravel Echo
Laravel Echo
是一个 JavaScript
库,web
端可以轻松订阅频道并收听 Laravel
广播的事件
通过 npm
包管理器安装 Echo
npm install
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 t