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

使用socket.io连接WebSocket时出现404错误,请求URL异常求助

解决socket.io-client连接原生WebSocket服务出现404的问题

你遇到的404错误核心原因是:socket.io-client只能连接socket.io服务器,而你的后端是原生WebSocket服务,两者协议不兼容。socket.io-client默认会请求/socket.io/路径做握手,但你的后端没有该路径,因此返回404;而Postman用原生WebSocket协议直接连接/connect/testing/端点,所以能正常工作。

以下是两种可行的解决方案:

方案一:改用原生WebSocket API(推荐)

直接使用浏览器原生的WebSocket对象连接后端端点,无需依赖socket.io-client:

import { useEffect } from 'react';

// ...

useEffect(() => {
  // 建立原生WebSocket连接
  const ws = new WebSocket('ws://127.0.0.1:8000/connect/testing/');

  // 连接成功回调
  ws.onopen = () => {
    console.log('WebSocket连接已建立');
  };

  // 接收消息回调
  ws.onmessage = (event) => {
    const data = JSON.parse(event.data);
    console.log('收到消息:', data);
    // 可根据消息类型处理,匹配你预期的逻辑
    if (data.type === 'connection_established') {
      console.log('data is:', data.text);
    }
  };

  // 连接关闭回调
  ws.onclose = () => {
    console.log('WebSocket连接已关闭');
  };

  // 组件卸载时关闭连接,避免内存泄漏
  return () => {
    ws.close();
  };
}, []);

方案二:后端改用socket.io搭建服务

如果一定要使用socket.io-client,需要后端也配置socket.io服务,并匹配前端的路径设置:

后端示例(Node.js)

const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);

// 配置socket.io,指定对应路径
const io = new Server(server, {
  path: '/connect/testing/'
});

// 监听连接事件
io.on('connection', (socket) => {
  console.log('客户端已连接');
  // 发送对应前端'FromAPI'事件的消息
  socket.emit('FromAPI', { 
    type: 'connection_established', 
    text: 'connection successful' 
  });

  // 监听断开连接事件
  socket.on('disconnect', () => {
    console.log('客户端已断开');
  });
});

server.listen(8000, () => {
  console.log('服务器运行在 http://127.0.0.1:8000');
});

前端修改后的代码

import socketIOClient from 'socket.io-client';
import { useEffect } from 'react';

// ...

useEffect(() => {
  // 连接socket.io服务器,指定对应路径
  const socket = socketIOClient('http://127.0.0.1:8000', {
    path: '/connect/testing/'
  });

  socket.on('FromAPI', data => {
    console.log('data is:', data);
  });

  // 组件卸载时断开连接
  return () => {
    socket.disconnect();
  };
}, []);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:45:42