# reverb_demo **Repository Path**: shebaoting/reverb_demo ## Basic Information - **Project Name**: reverb_demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-22 - **Last Updated**: 2025-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Laravel Reverb 问题复现 本项目用于复现一个 Laravel Reverb 的问题:无法从 Laravel 应用广播消息到 Postman 客户端。 ## 环境要求 * PHP >= 8.3 * Composer * Node.js 和 npm (仅用于安装前端依赖,如果你的项目有前端部分) * 支持 SQLite 的 PHP 环境 ## 复现步骤 1. **克隆仓库:** ```bash git clone https://gitee.com/shebaoting/reverb_demo.git cd reverb_demo ``` 2. **安装依赖:** ```bash composer install # 如果你的项目有前端部分,并且需要安装前端依赖: # npm install ``` 3. **数据库 (已提供):** 本项目已包含 SQLite 数据库文件 (`database/database.sqlite`),其中包含了复现问题所需的数据。无需手动创建数据库或运行迁移。 4. **获取 Sanctum Token (用户 ID 为 1):** * 打开 Tinker: ```bash php artisan tinker ``` * 在 Tinker 中,运行以下代码: ```php $user = App\Models\User::find(1); $token = $user->createToken('reverb-test-token')->plainTextToken; echo $token; ``` * 复制输出的 token。 这将是你在 Postman 中使用的 token。 5. **启动 Reverb 服务器:** ```bash php artisan reverb:start --debug ``` 6. **启动 Laravel 开发服务器 (如果需要):** ```bash php artisan serve ``` 7. **Postman 测试:** * **连接到 Reverb:** * 创建一个新的 WebSocket Request。 * URL: `ws://demo.test:8080/app/t40b3nc0cy3cvll0ikqk?protocol=7&client=js&version=7.0.3&flash=false` (将 `t40b3nc0cy3cvll0ikqk` 替换为 `.env` 文件中的 `REVERB_APP_KEY`)。 * Headers: * `Authorization`: `Bearer {your_sanctum_token}` (将 `{your_sanctum_token}` 替换为你在 Tinker 中获取的 token)。 * **获取 auth 签名:** * 创建一个新的 HTTP Request: * 方法: `POST` * URL: `http://demo.test/api/reverb/auth` * Headers: * `Authorization`: `Bearer {your_sanctum_token}` * `Accept`: `application/json` * `Content-Type`: `application/json` * Body (raw, JSON): ```json { "socket_id": "{your_socket_id}", // 从 WebSocket 连接的 pusher:connection_established 消息中获取 "channel_name": "private-channel.1" } ``` * Send 这个请求, 得到auth * **订阅频道:** * 在 WebSocket Request 的 "Messages" 标签页中,发送以下消息: ```json { "event": "pusher:subscribe", "data": { "channel": "private-channel.1", "auth": "{your_auth_signature}" //上一步获取的 } } ``` * 你应该会收到 `pusher_internal:subscription_succeeded` 消息。 * **触发广播事件:** * 在浏览器中访问 `http://demo.test/send-message/1` * **预期结果:** 在 Postman 的 "Messages" 标签页中,你应该会收到 `message.sent` 事件的消息。 * **实际结果:** 但是实际上在 Postman 的 "Messages" 标签页,我没收到任何消息,并且发送这个浏览器请求以后,在`php artisan reverb:start --debug`的命令行窗口中,也没看到广播命令