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

如何在Laravel 8 API中实现websockets?连接返回404错误如何解决

Laravel 8 WebSocket 实现问题排查与测试方案

404连接错误排查

  • 确认WebSocket服务已正常启动:执行php artisan websockets:serve后查看终端输出,确认服务默认监听的6001端口未被其他程序占用
  • 核对配置文件参数:检查config/websockets.php中的path配置项,需和客户端发起连接的路径完全匹配,默认路径为/ws
  • 排除反向代理配置问题:生产环境使用域名访问时,需在Nginx/Apache中配置WebSocket反向代理规则,将对应路径的请求转发到6001端口,同时添加Upgrade、Connection请求头支持
  • 校验环境变量配置:确保.env文件中BROADCAST_DRIVER设置为pusher,PUSHER_HOST、PUSHER_PORT、PUSHER_SCHEME参数与本地/生产的WebSocket服务配置一致,不要保留Pusher官方的默认配置
  • 排除中间件拦截:如果API配置了全局路由前缀或身份校验中间件,需将WebSocket连接路径加入校验排除名单,同时在App\Http\Middleware\VerifyCsrfToken的$except属性中添加WebSocket相关路径,跳过CSRF校验

功能构建与测试方法

  • 本地测试优先使用直连地址:直接用ws://127.0.0.1:6001/ws作为连接地址发起测试,排除反向代理配置影响
  • 使用Tinker调试广播链路:执行php artisan tinker后运行event(new 自定义广播事件类()),查看WebSocket服务终端是否有事件接收日志,确认广播流程正常
  • 客户端极简测试代码示例:
const ws = new WebSocket('ws://127.0.0.1:6001/ws?appId=你的PUSHER_APP_KEY');
ws.onopen = () => console.log('连接成功');
ws.onerror = (e) => console.log('连接错误', e);
ws.onmessage = (msg) => console.log('收到消息', msg.data);
  • 核对频道授权配置:确认私有频道、存在频道的授权逻辑已正确定义在routes/channels.php中,权限校验返回值符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:15:05