05-常见问题

常见问题

Q: 连接 wss:// 地址失败?

  1. 解决方案:
  2. 先用浏览器访问该地址测试
  3. 如果浏览器也报证书错误,说明证书确实有问题
  4. 测试阶段可先用 ws://(明文)替代
  5. 生产环境请使用有效 CA 签发的证书

Q: WebSocket 握手失败?

  1. 检查项:
  2. URL 是否以 ws://wss:// 开头
  3. 路径是否正确
  4. 目标服务器是否真的运行了 WebSocket 服务

Q: 服务端模式下客户端连不上?

  1. 检查项:
  2. 确认端口未被占用
  3. 确认路径设置正确
  4. 检查防火墙是否阻止了该端口
  5. 客户端 URL 中路径和服务端路径是否匹配

Q: 连接空闲后自动断开?

WebSocket 协议定义了 Ping/Pong 机制保持连接。Qt 底层会自动发送 Pong 响应服务端的 Ping。但如果服务端设置了空闲超时而未发送 Ping,连接可能会断开。

这种情况下需要应用层自己发送心跳消息。

Q: WebSocket 和 Socket 有什么区别?应该用哪个?

用 Socket用 WebSocket
TCP 原生协议❌(WebSocket 有额外帧格式)
和浏览器通信
自定义二进制协议可用 Binary 消息
需要 HTTP 兼容✅(通过 HTTP Upgrade)
极低延迟要求✅(更轻量)略有开销

简单来说:和浏览器/Web 应用通信用 WebSocket,和其他一切用 Socket。

Q: 支持 Socket.IO 吗?

Socket.IO 不是标准的 WebSocket 协议,它有自己的应用层协议(Engine.IO),与标准 WebSocket 不兼容。NexWebSocket 无法直接连接 Socket.IO 服务器。