本地开发时 laravel websockets 报“failed to connect to pusher”错误,实为广播配置误用 pusher 官方服务而非本地 websocket 服务器所致;只需禁用 tls 并指向本地 `127.0.0.1:6001`,即可让事件广播正确路由至自托管 websocket 服务。
该错误的根本原因在于:你正在使用 beyondcode/laravel-websockets 搭建本地 WebSocket 服务器,但 broadcasting.php 中的 pusher 配置仍默认尝试连接 Pusher 官方云服务(尤其是启用了 TLS 或未显式覆盖 host/port 时)。虽然配置中已设置 'host' =>

值得注意的是,即使连接失败,Laravel 的广播机制仍会继续执行后续逻辑(如触发事件回调),因此你观察到“错误后事件仍被发出”——这并非事件成功广播,而是广播驱动降级失败后,框架未中断流程所致,实际客户端并未收到消息。
✅ 正确配置方式如下(以 config/broadcasting.php 为准):
'connections' => [
'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'),
'useTLS' => false, // ? 关键:禁用 TLS,匹配本地 HTTP 服务
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'http',
'encrypted' => false, // 兼容旧版 SDK,建议显式声明
],
],
],⚠️ 注意事项:
- 删除或注释掉 'timeout' => 1:过短的超时(如 1 秒)易因本地网络延迟导致误判失败;
- 确保 laravel-websockets 服务正在运行:php artisan websockets:serve,且监听 0.0.0.0:6001(非仅 127.0.0.1,避免 Docker 或跨网络访问问题);
- .env 中 PUSHER_APP_CLUSTER 值(如 mt1)仅作标识用途,本地服务不依赖真实 Pusher 集群,可保留也可设为任意字符串(如 local),但需与前端 JS 初始化时的 cluster 保持一致;
- 若使用 Laravel Echo 前端,确保初始化时也关闭 TLS:
window.Echo = new Echo({ broadcaster: 'pusher', key: import.meta.env.VITE_PUSHER_APP_KEY, cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER, wsHost: window.location.hostname, wsPort: 6001, forceTLS: false, // ? 同样关键 disableStats: true, });
总结:这不是 Pusher 凭据或网络连通性问题,而是协议与服务目标错配。将广播驱动明确指向本地 HTTP WebSocket 服务,并关闭 TLS,即可彻底解决该错误,确保事件真正触达客户端。








