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

Heroku部署Node.js+PHP项目的Socket.IO WS服务器出现404错误求助

解决方案

1. 修复服务端路由拦截逻辑

你当前配置的全局中间件会拦截所有请求直接返回index2.php,导致Socket.IO专用的/socket.io/*路径请求无法被正常处理,直接返回404。需要调整路由规则,仅将根路径/指定路径的请求返回PHP文件:

// 原错误写法:所有请求都返回index2.php
// .use((req, res) => res.sendFile(INDEX, { root: __dirname }))
// 修正写法:仅匹配根路径的GET请求返回文件
.get('/', (req, res) => res.sendFile(INDEX, { root: __dirname }))

2. 补全Socket.IO跨域配置

由于你采用Node.js服务+PHP后端的分离架构,需要在服务端配置跨域规则,允许PHP前端域名的访问请求:

// 修正io初始化逻辑
const io = socketIO(server, {
  cors: {
    origin: "你的PHP前端部署域名", // 生产环境请替换为实际域名,测试阶段可临时写"*"
    credentials: true
  }
});

3. 修正客户端连接状态判断逻辑

Socket.IO的连接是异步操作,初始化实例后立即判断connected状态必然返回false,需改为监听connect事件处理连接成功后的逻辑:

var socket = io("https://xamchat.herokuapp.com/", {withCredentials: true});

// 监听连接成功事件
socket.on('connect', () => {
  alert("connected");
  socket.emit("connection");
  socket.on('time', function(data) {
    console.log(data);
  });
});

// 可增加连接失败监听方便排查问题
socket.on('connect_error', (err) => {
  console.error('连接失败错误信息:', err);
  alert("not connected");
});

4. 检查Heroku部署配置

确认项目根目录下的Procfile文件配置正确,启动命令指向你的WS服务入口文件,示例如下:

web: node server.js

请将server.js替换为你实际的服务端文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:06