Laravel Echo 连接失败主因是 WebSocket 服务未运行或配置不匹配:必须启动 laravel-websockets/reverb,且 BROADCAST_DRIVER=pusher、PUSHER_APP_KEY 前后端一致,wsHost 避免 localhost、改用 127.0.0.1 或真实 IP,wsPort=6001(laravel-websockets)或 8080(reverb),私有频道需 routes/channels.php 授权并确保 /broadcasting/auth 返回 200。

用 Laravel 做实时应用,laravel-websockets 或 reverb 必须跑起来,否则 Laravel Echo 永远卡在 connecting —— Laravel 本身不带 WebSocket 服务,这是硬性前提。
laravel-websockets 启动后连不上?检查这五处配置对齐
前端反复重连、控制台无报错但收不到事件,大概率是客户端和后端“说的不是同一种话”。
-
BROADCAST_DRIVER在.env中必须设为pusher(即使你没用 Pusher),因为laravel-websockets兼容 Pusher 协议,但不接受websockets这个值 -
PUSHER_APP_KEY必须和config/websockets.php里apps.0.key完全一致;默认是local,很多人忘了改 -
wsHost别写localhost,Docker 或某些浏览器会解析失败,换成127.0.0.1或服务器真实 IP -
wsPort默认是6001,不是80或443;Nginx 反代时必须显式配proxy_http_version 1.1和Upgrade头 - 确保
php artisan websockets:serve已运行,且没被防火墙拦截(Linux 上检查ufw status,Mac 上看pfctl)
reverb:start 启动后前端 still connecting?注意端口与 TLS
reverb 是 Laravel 官方方案,开箱即用,但默认端口和协议容易踩坑。
- 默认监听
127.0.0.1:8080,前端wsHost要对应填127.0.0.1,不能只写localhost - 开发环境若走 HTTPS 页面(比如
https://localhost),WebSocket 必须用wss://,需在 Echo 初始化时加forceTLS: true -
reverb:start不会自动后台运行,关终端就停;生产要用systemd或supervisor托管 -
config/reverb.php中的ssl配置仅影响wss,开发阶段可先关掉,避免证书错误阻断连接
频道名前后端不匹配:PrivateChannel 和 .private- 前缀
事件发出去了,前端就是收不到——90% 是频道名拼写或格式不对,Laravel 广播靠它做路由匹配。
- 后端返回
new PrivateChannel('user.123'),前端必须用.private-user.123(开头带点、中间用短横) - 不能写成
user.123、.user.123或private-user-123,大小写和分隔符都敏感 - 如果用了
broadcastAs('order.updated'),前端监听就得是.listen('order.updated', ...),而不是类名App.Events.OrderUpdated - 私有/存在频道必须在
routes/channels.php中定义授权逻辑,返回200JSON,否则直接 403,Echo 不报具体错
事件广播了但没触发监听?查队列和 ShouldBroadcast 实现
调用 event(new SomeEvent) 后静默失败,不是代码没跑,而是广播链路断在中间。
- 确认事件类实现了
ShouldBroadcast接口,且broadcastOn()返回的是Channel、PrivateChannel或PresenceChannel实例,不是字符串 - 如果
QUEUE_CONNECTION设为redis或database,必须运行php artisan queue:work,否则事件压根不进广播流程 - 开发时临时切回
sync驱动能快速验证逻辑,但上线前务必切回异步驱动并确保 worker 活着 -
php artisan tinker里手动触发事件 + 查storage/logs/laravel.log,比猜更可靠
最常被忽略的是:私有频道的 /broadcasting/auth 请求是否真返回了 200,以及 wsHost 和后端服务实际监听地址是否物理可达——这两点不验证,其他都白配。


















