Laravel WebSockets 本地连接 Pusher 失败的解决方案

Laravel WebSockets 本地连接 Pusher 失败的解决方案

本地开发时 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 为准):

RMI远程方法调用 word版

RMI远程方法调用 word版

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,即可彻底解决该错误,确保事件真正触达客户端。

https://www.php.cn/faq/1981977.html

发表回复

Your email address will not be published. Required fields are marked *