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

Socket.io服务器无法正常接收WebSocket连接,但排查链接可访问

Socket.io WebSocket连接失败排查与解决

问题情况

我的Socket.io服务器可正常访问 <服务器URL>/socket.io/?EIO=4&transport=polling(符合文档排查步骤),但无法建立WebSocket连接,使用Postman测试WebSocket时出现异常。

当前代码:

let server = require('http').createServer()

const io = require('socket.io')(server)

server.listen(5000)

console.log('init complete')

参考多篇教程重写代码后问题仍未解决。

排查与解决步骤

  • 修正WebSocket连接地址
    Postman连接时需使用正确的WebSocket协议地址:ws://<服务器IP>:5000/socket.io/?EIO=4&transport=websocket,HTTPS环境替换为wss://开头。

  • 开放端口与防火墙配置
    确认服务器的5000端口已开放,防火墙/安全组未拦截WebSocket的握手请求(WebSocket使用HTTP握手,后续切换为TCP流量,需确保端口双向通行)。

  • 添加CORS与事件监听
    跨域限制是WebSocket连接失败的常见原因,同时添加基础事件监听验证连接状态:

let server = require('http').createServer()
const io = require('socket.io')(server, {
  cors: {
    origin: "*", // 开发环境临时放开,生产环境需指定具体允许的域名
    methods: ["GET", "POST"]
  }
})

io.on('connection', (socket) => {
  console.log('客户端已连接:', socket.id)
  socket.on('disconnect', () => {
    console.log('客户端已断开:', socket.id)
  })
})

server.listen(5000)
console.log('init complete')
  • 验证版本兼容性
    确保客户端(含Postman使用的Socket.io版本)与服务器端的Socket.io主版本一致(如均为4.x系列),版本不匹配会导致握手逻辑不兼容。

  • 浏览器端调试
    用浏览器编写简单测试代码,查看控制台的详细错误信息:

<script src="https://cdn.socket.io/4.7.2/socket.io.min.js"></script>
<script>
  const socket = io('http://<服务器IP>:5000', {
    transports: ['websocket'] // 强制使用WebSocket协议
  })
  socket.on('connect', () => console.log('连接成功'))
  socket.on('connect_error', err => console.error('连接失败:', err))
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:36:25