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

React客户端连接本地Node.js WebSocket服务失败问题求助

问题原因

  • WebSocket 协议不能使用 http/https 前缀,必须使用专属的 ws(非加密)/wss(加密) 前缀
  • 你注释掉的连接地址没有带上后端配置的 WebSocket 路径 /ws,导致匹配不到后端的 WebSocket 服务

解决方案

方案1:使用浏览器原生 WebSocket API(无需安装第三方依赖,更推荐)

React 运行在浏览器环境下,直接调用原生 WebSocket 接口即可,不需要额外安装 ws 或者 websocket 包,修正后的代码如下:

import React from "react";

function App() {
  React.useEffect(() => {
    // 地址协议改为ws,带上后端配置的/ws路径
    const client = new WebSocket('ws://localhost:3001/ws');

    client.onopen = () => {
      console.log('WebSocket Client Connected');
    };
    client.onmessage = (message) => {
      // 后端发送的是JSON字符串,需要解析
      const data = JSON.parse(message.data);
      console.log('收到服务端消息:', data);
    };
    client.onerror = (error) => {
      console.log('WebSocket连接错误:', error);
    };
    client.onclose = () => {
      console.log('WebSocket连接关闭');
    };

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

  return null
}

export default App;

方案2:继续使用websocket包

只需要修正连接地址即可:

import React from "react";
import { w3cwebsocket as W3CWebSocket } from "websocket";

function App() {
  React.useEffect(() => {
    // 修正协议为ws,同时带上/ws路径
    const client = new W3CWebSocket('ws://localhost:3001/ws');

    client.onopen = () => {
      console.log('WebSocket Client Connected');
    };
    client.onmessage = (message) => {
      console.log(message);
    };
    client.onerror = (error) => {
      console.log('连接错误:', error);
    };

    return () => {
      client.close();
    };
  }, [])

  return null
}

注意:不要把 WebSocket 实例定义在组件外部,否则热更新时会重复创建连接,导致资源泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:27:01