问题描述

项目里使用 WebSocket 做实时通信时,本地测试是正常的,但联调环境一直连接失败。

当时的现象很简单:

  • 自己本地环境可以连通
  • 换到后端联调环境就连不上
  • 区别主要在于目标端口不同

原因分析

这类问题如果本地正常、换环境失败,通常先不要怀疑前端代码本身,优先看网络和端口。

这次的实际原因是:联调环境对应的端口没有放行,被 Windows 防火墙拦截了。

也就是说,不是 WebSocket API 用错了,而是请求根本没真正到达目标服务。

解决方式

最直接的处理方式有两个:

  1. 在 Windows 防火墙中放行目标端口
  2. 临时关闭防火墙后重新测试

如果关闭防火墙后连接立刻恢复,基本就可以确认问题在端口访问策略,而不是业务代码。

建议的排查顺序

遇到 WebSocket 连接失败时,可以按这个顺序检查:

  1. 确认服务端进程是否真的启动
  2. 确认服务端监听的端口是否正确
  3. 确认当前机器是否能访问这个 IP 和端口
  4. 检查 Windows 防火墙或安全组是否拦截了目标端口
  5. 再回头检查 ws://wss://、路径和鉴权参数

总结

如果 WebSocket 在本地正常、换环境失败,优先排查端口是否可达。

很多时候问题不在前端代码,而在这些更基础的条件:

  • 服务没监听
  • 端口没放行
  • 防火墙拦截

先把网络链路打通,再看代码,排查效率会高很多。