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

本地环境使用Socket.io出现404错误,如何解决?

解决Socket.io本地开发404错误

问题重现

本地开发Socket.io时,客户端请求https://localhost:4000/socket.io/返回404,相关代码及错误信息如下:

客户端代码

const socket = io.connect('https://localhost:4000/');
socket.emit('trim-movie/go', data);
socket.on('trim-movie-response', trimResponse);

服务端代码

const server = app.listen(port, () => console.log('server is online...'));
const io = socket(server);
io.on("connection", (socket) => {
    socket.on('trim-movie/go', (data) => trimMovie(data, socket));
});

错误提示:

socket.io.js?v=1:1415 GET https://localhost:4000/socket.io/?EIO=4&transport=polling&t=OI2OmiX 404 (Not Found)

排查与解决步骤

  • 统一客户端与服务端协议
    客户端用了https协议,但本地开发若无有效SSL证书,服务端实际运行在http协议下。要么将客户端连接地址改为http://localhost:4000/,要么为本地服务配置合法SSL证书。

  • 确保Socket.io版本完全匹配
    客户端与服务端的Socket.io版本必须一致(比如都使用4.x系列),版本不兼容会导致路由匹配失败。执行命令统一版本:

    # 服务端安装指定版本
    npm install socket.io@4.7.2
    # 客户端同步引入对应版本的脚本(本地文件或CDN)
    
  • 排查框架中间件冲突
    若服务端基于Express/Koa等框架,检查是否有中间件拦截所有请求(如自定义路由、静态资源中间件),需确保/socket.io/路径不被拦截。比如Express中可调整中间件顺序,让Socket.io的路由优先处理。

  • 验证端口一致性
    确认服务端监听的port变量值为4000,或修改客户端连接地址为服务端实际使用的端口号。

  • 修正Socket.io初始化方式
    确保服务端正确传入HTTP服务器实例。以Express为例,新版本Socket.io推荐如下初始化方式:

    const express = require('express');
    const http = require('http');
    const { Server } = require('socket.io');
    
    const app = express();
    const server = http.createServer(app);
    const io = new Server(server);
    
    io.on('connection', (socket) => {
      socket.on('trim-movie/go', (data) => trimMovie(data, socket));
    });
    
    server.listen(4000, () => {
      console.log('server is online...');
    });
    

    旧版本写法require('socket.io')(server)虽仍可用,但使用Server类初始化能避免潜在的路由注册错误。

  • 清除浏览器缓存
    浏览器缓存的旧Socket.io客户端脚本可能引发兼容性问题,打开开发者工具勾选「禁用缓存」后刷新页面重试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:10:30