WebSocket 连接失败问题修复(Node.js / 前端调试记录)

记录一次 WebSocket 连接失败的排查。问题不是代码,而是 Windows 防火墙没有放行对应端口,开放端口后恢复正常。

技术笔记Windows 防火墙WebSocketNode.js

在使用 WebSocket 进行实时通信时,遇到了连接失败的问题,但在本地开发环境中测试一切正常。

经过排查,问题出现在不同运行环境之间的网络访问限制


问题描述

WebSocket 在本地测试环境中(如 localhost:8080)可以正常连接,但在其他开发环境中(不同端口或服务器地址)连接失败。

对比发现:

  • 本地环境:8080 端口正常通信
  • 其他环境:使用不同端口(连接失败)

排查过程

初步怀疑方向包括:

  • WebSocket 服务是否正常启动
  • 前后端地址是否一致(ws / wss)
  • 端口是否开放
  • 跨域或协议问题(http vs https / ws vs wss)
  • 防火墙或安全组限制

问题原因

最终定位为:

Windows 防火墙拦截了非默认端口的 WebSocket 连接。

在本地测试时使用的 8080 端口通常是开发环境默认开放端口,因此不会触发拦截。

但在连接其他端口(如 3000、4000、9000 等)时,防火墙策略可能阻止了入站/出站连接。


解决方案

方案一:开放端口(推荐)

在 Windows 防火墙中手动开放 WebSocket 使用的端口:

  • 控制面板 → Windows Defender 防火墙
  • 高级设置
  • 入站规则 / 出站规则
  • 添加对应端口(TCP)

例如:

  • 8080
  • 3000
  • 4000

方案二:临时关闭防火墙(仅用于调试)

控制面板\系统和安全\Windows Defender 防火墙

Image_20260703105817.png 不推荐长期使用,仅用于排查问题

关闭后可以快速验证是否为防火墙导致问题。

总结

本次问题核心原因是:

非默认端口在 Windows 防火墙中被拦截,导致 WebSocket 连接失败。

解决思路:

  • 优先检查端口与网络访问
  • 开放对应防火墙规则(推荐)
  • 或使用代理 / 同域部署(最佳实践)
  • 避免直接关闭防火墙作为长期方案