
本地开发时 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' => '127.0.0.1' 和 'port' => 6001,但 pusher-php-server SDK 在 useTLS => true(默认行为)下会强制使用 https:// 协议和 443 端口,导致与本地 HTTP 服务(http://127.0.0.1:6001)协议不匹配,最终触发连接超时并报错 Failed to connect to Pusher.。
值得注意的是,即使连接失败,Laravel 的广播机制仍会继续执行后续逻辑(如触发事件回调),因此你观察到“错误后事件仍被发出”——这并非事件成功广播,而是广播驱动降级失败后,框架未中断流程所致,实际客户端并未收到消息。
✅ 正确配置方式如下(以 config/broadcasting.php 为准):
Raza Microelectronics, Inc.(RMI公司)是勇于创新的信息基础架构半导体解决方案领导厂商,其产品广泛地被应用于改善不断演进的信息基础设施。在这个演进过程中,数据中心和家庭之间的连接在强度和速率方面都逐渐升级;安全和智能化已经成为每一个网络系统环境的要求;同时,边缘网络日益成为瓶颈,促使业界需要更具扩展能力及成本优势的智能网络接入方法。RMI公司为信息基础架构设计并提供多样化的解决方案,为下一代灵活的企业和数据中心应用、智能接入和数字影像系统奠定基础。 RMI远程方法调用目录 一、
'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,即可彻底解决该错误,确保事件真正触达客户端。









