Laravel10+Vue3集成Broadcasting遇Pusher连接拒绝错误求助
问题解决:Laravel 10 + Vue 3 实时广播连接失败(cURL error 7)
核心问题是 Laravel WebSockets 服务未启动 或 Lando 环境端口未正确映射,导致6001端口无监听进程,触发连接拒绝错误。以下是分步解决方案:
1. 启动 Laravel WebSockets 服务
Laravel WebSockets 需手动启动才能监听6001端口,在 Lando 环境下执行:
lando artisan websockets:serve
如需后台运行,添加--daemon参数:
lando artisan websockets:serve --daemon
2. 配置 Lando 端口映射
Lando 默认不会暴露6001端口到本地,需在项目根目录的.lando.yml中添加端口转发:
services: appserver: ports: - "6001:6001" # 本地端口:容器内部端口
添加后重启 Lando 生效:
lando rebuild -y
3. 修正前端环境变量配置
前端.env中的VITE_PUSHER_APP_HOST不要加引号,否则会导致 Echo 连接地址错误:
VITE_PUSHER_APP_KEY=local VITE_PUSHER_APP_HOST=localhost # 或127.0.0.1,对应Lando映射的本地地址 VITE_PUSHER_CLUSTER=eu
4. 验证后端事件与广播配置
- 确保
UpdateUser事件命名空间正确(如App\Events\UpdateUser),测试路由已正确引入:use App\Events\UpdateUser; Route::get('/test', function () { event(new UpdateUser()); return '事件已触发'; }); - 确认
broadcasting.php中的 Pusher 配置与.env一致:'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'encrypted' => false, 'host' => '127.0.0.1', // 容器内部访问websockets服务用127.0.0.1即可 'port' => 6001, 'scheme' => 'http', 'useTLS' => false ], ],
5. 测试连接与事件触发
- 启动服务后,访问
http://localhost:6001/laravel-websockets,输入app keylocal,查看仪表盘是否正常连接,确认服务运行状态。 - 前端Vue组件添加监听代码,验证消息接收:
mounted() { window.Echo.channel('userupdate-channel') .listen('UpdateUser', (e) => { console.log('收到实时消息:', e.message); }); } - 访问测试路由
/api/test,查看前端控制台是否打印消息,同时检查websockets仪表盘的事件日志。
额外排查点
- 若仍有问题,检查Lando容器内部是否能访问127.0.0.1:6001:
返回lando ssh curl http://127.0.0.1:6001Laravel WebSockets Server则说明服务在容器内正常运行,问题出在端口映射或前端配置。 - 确认
BroadcastServiceProvider已在config/app.php中注册:App\Providers\BroadcastServiceProvider::class,
内容的提问来源于stack exchange,提问作者Federico Tassara
相关产品推荐
相关产品推荐

