You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Websocket与Echo本地正常服务器失效:实时通知不触发排查

实时通知功能部署后无响应的排查思路

一、服务器端配置检查

  • 更新广播配置Host:确保config/broadcasting.php中pusher选项的host不是127.0.0.1,替换为服务器内网IP、公网IP或域名(根据websocket服务部署位置调整)。同时确认.env里的PUSHER_APP_KEY、PUSHER_APP_SECRET、PUSHER_APP_ID、PUSHER_APP_CLUSTER变量在服务器上配置正确。
  • 确认Websockets服务运行状态:服务器需持续运行websocket服务,不能仅临时启动。用ps aux | grep websockets查看进程是否存在;若未运行,先执行php artisan websockets:serve临时测试,后续通过Supervisor或systemd配置为后台守护进程。
  • 查看Websockets服务日志:临时启动websocket服务(php artisan websockets:serve),观察控制台输出是否有连接失败、认证错误或广播事件异常;若用守护进程,查看对应日志文件定位问题。
  • 验证Vite环境变量:服务器.env中的VITE_PUSHER_HOST必须设为服务器公网IP或域名(不能是127.0.0.1,否则前端无法连接),修改后执行npm run build重新编译前端资源,确保前端使用最新配置。

二、客户端检查

  • 查看浏览器控制台错误:打开浏览器开发者工具(F12)的Console标签,检查是否有Pusher/Echo连接失败、密钥无效、CORS报错等信息,直接定位前端连接问题。
  • 确认Echo连接参数:在浏览器控制台执行Echo.connector.options,检查wsHost是否为服务器公网IP/域名、wsPort是否为6001、key是否与服务器端一致。参数错误说明前端资源未正确编译或环境变量配置有误。
  • 检查CORS配置:
    • Laravel端:config/cors.php的paths需包含websocket相关路径(如/ws/*),allowed_origins允许前端域名(测试时可临时设为*)。
    • Websockets端:config/websockets.php中apps下的allowed_origins数组需添加前端访问的域名。

三、网络与防火墙检查

  • 开放6001端口:服务器防火墙(UFW、iptables或云服务商安全组)必须允许外部访问6001端口。用telnet 服务器IP 6001或nc -zv 服务器IP 6001测试端口是否可达,不通则调整防火墙规则。
  • HTTPS环境适配:若网站使用HTTPS,浏览器会阻止未加密的ws://连接,需配置websocket服务使用SSL:
    • 服务器端广播配置中,将scheme改为https,forceTLS设为true,并配置正确的SSL端口(如6002)。
    • 前端Echo配置中,使用wssHost和wssPort,确保连接协议为wss://。

四、其他潜在问题

  • 私有频道认证:实时通知使用私有频道,确保/broadcasting/auth路由正常工作。通过POST请求测试该路由(携带频道名参数),若返回403或错误,检查CSRF令牌、用户认证状态或频道授权逻辑。
  • 队列配置:若.env中QUEUE_CONNECTION不是sync,需确保服务器运行队列worker(php artisan queue:work),否则广播事件会堆积在队列中无法触发。
  • 清除缓存:执行php artisan config:clear、php artisan cache:clear清除服务器缓存,确保最新配置生效。

内容的提问来源于stack exchange,提问作者Vpa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:25:16