laravel Reverb如何实现实时WebSocket通信_Laravel Reverb实时WebSocket通信教程

28次阅读

首先安装并配置 Laravel Reverb 扩展包,通过 Composer 安装后发布配置文件并运行迁移;接着在 .env 中设置 Redis 为广播驱动,确保 broadcasting 配置正确;然后创建实现 ShouldBroadcast 的事件类,定义频道及授权逻辑,并在控制器触发事件;前端使用 Laravel Echo 连接 Reverb 服务,监听公共或私有频道事件;最后启动 Reverb 服务(php artisan reverb:start),建议生产环境用 Supervisor 管理进程;注意配置 CORS、权限验证及日志调试。

laravel Reverb如何实现实时WebSocket通信_Laravel Reverb实时WebSocket通信教程

Laravel Reverb 是 Laravel 官方推出的轻量级 WebSocket 服务,专为实现实时通信设计。它与 Laravel Echo 配合使用,能轻松实现聊天、通知推送、在线状态更新等实时功能。下面带你一步步搭建基于 Laravel Reverb 的 WebSocket 通信系统。

安装与配置 Laravel Reverb

Reverb 目前作为 Laravel 的官方扩展包,支持 Laravel 10+ 版本。先通过 Composer 安装:

composer require laravel/reverb

发布配置文件和迁移表:

php artisan vendor:publish --provider="LaravelReverbReverbServiceProvider"

这会生成 config/reverb.php 和数据库迁移文件。运行迁移创建必要的数据表:

php artisan migrate

接下来配置环境变量。在 .env 文件中设置 Redis 作为广播驱动(推荐):

BROADCAST_DRIVER=redis REDIS_CLIENT=predis

确保 config/broadcasting.php 中的 Redis 连接配置正确。

启用广播事件与频道授权

Laravel Reverb 基于广播系统工作。你需要定义广播事件并指定其频道。例如创建一个新消息通知事件:

php artisan make:event MessageSent

编辑该事件类,使其实现 ShouldBroadcast 接口:

class MessageSent implements ShouldBroadcast {     public $message;      public function __construct($message)     {         $this->message = $message;     }      public function broadcastOn()     {         return new Channel('chat');     } }

如果使用私有频道,需定义授权逻辑。在 routes/channels.php 中添加:

Broadcast::channel('chat', function ($user) {     return $user ? true : false; });

然后在控制器中触发事件:

laravel Reverb如何实现实时WebSocket通信_Laravel Reverb实时WebSocket通信教程

ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

laravel Reverb如何实现实时WebSocket通信_Laravel Reverb实时WebSocket通信教程116

查看详情 laravel Reverb如何实现实时WebSocket通信_Laravel Reverb实时WebSocket通信教程

event(new MessageSent('Hello World'));

前端连接 WebSocket 并监听事件

前端使用 Laravel Echo 连接 Reverb 提供的 WebSocket 服务。先安装依赖:

npm install --save laravel-echo @socket.io/socket.io-client

resources/js/bootstrap.js 或主 JS 文件中初始化 Echo:

import { Echo } from 'laravel-echo';  window.io = require('socket.io-client');  window.Echo = new Echo({     broadcaster: 'socket.io',     host: window.location.hostname + ':8080', // Reverb 默认端口     scheme: 'http',     csrfToken: document.querySelector('meta[name="csrf-token"]').getAttribute('content') });

监听公共频道事件:

Echo.channel('chat')     .listen('MessageSent', (e) => {         console.log(e.message);     });

若监听私有频道,使用 private() 方法并确保用户已登录:

Echo.private('chat')     .listen('MessageSent', (e) => {         console.log('Private:', e.message);     });

启动 Reverb WebSocket 服务

开发环境下,使用 Artisan 命令启动 Reverb 服务:

php artisan reverb:start

默认监听 8080 端口。你可在 config/reverb.php 中修改主机、端口、SSL 设置等。

生产环境建议使用 Supervisor 管理进程,并配合 Nginx 反向代理处理 SSL 和负载均衡。

基本上就这些。只要广播配置正确,前后端连接顺畅,Laravel Reverb 就能稳定运行 WebSocket 通信。注意开启跨域(CORS)和权限验证,避免安全问题。整个流程不复杂但容易忽略细节,比如 Redis 驱动、频道授权或端口占用。调试时多看日志:storage/logs/laravel.log 和浏览器控制台信息都很关键。

以上就是php laravel redis js 前端 bootstrap composer nginx 浏览器 端口 php laravel composer nginx bootstrap echo 接口 private JS 事件 redis 数据库 ssl websocket 负载均衡

php laravel redis js 前端 bootstrap composer nginx 浏览器 端口 php laravel composer nginx bootstrap echo 接口 private JS 事件 redis 数据库 ssl websocket 负载均衡

text=ZqhQzanResources