05-常见问题
常见问题
Q: 连接 wss:// 地址失败?
- 可能原因:
- 服务器 SSL 证书无效或过期
- 服务器使用了自签名证书
- 系统缺少必要的根证书
- TLS 版本不兼容
- 解决方案:
- 先用浏览器访问该地址测试
- 如果浏览器也报证书错误,说明证书确实有问题
- 测试阶段可先用
ws://(明文)替代 - 生产环境请使用有效 CA 签发的证书
Q: WebSocket 握手失败?
- 常见错误:
426 Upgrade Required:目标服务器不支持 WebSocket404 Not Found:路径不正确400 Bad Request:URL 格式错误
- 检查项:
- URL 是否以
ws://或wss://开头 - 路径是否正确
- 目标服务器是否真的运行了 WebSocket 服务
Q: 服务端模式下客户端连不上?
- 检查项:
- 确认端口未被占用
- 确认路径设置正确
- 检查防火墙是否阻止了该端口
- 客户端 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 服务器。