You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.0 KiB
2.0 KiB
集成测试已知问题
问题1: 请求超时
现象
- 服务器接收到数据(日志显示"Server received")
- Handler执行了(路由匹配成功)
- 但客户端没有收到响应(Read超时)
可能原因
-
gnet AsyncWrite机制
- AsyncWrite是异步的,可能在OnTraffic返回后才发送数据
- 响应需要在事件循环的下一次迭代中发送
- 可能需要刷新或触发机制
-
数据丢弃时机
- 服务器在处理完数据后会丢弃输入数据(c.Discard)
- 但响应是通过AsyncWrite发送的,不依赖于输入数据处理
- 可能需要在响应发送完成后再丢弃数据
-
协议编码问题
- 如果协议编码启用,响应可能被编码
- 客户端期望原始数据,但收到编码后的数据
- 需要确保协议编码配置正确
临时解决方案
- 增加超时时间到10秒
- 使用Send和Receive分开处理
- 添加等待时间让服务器处理
- 明确禁用协议编码
长期解决方案
- 检查gnet的AsyncWrite机制
- 可能需要使用同步写入或刷新机制
- 确保响应在OnTraffic返回前发送
- 添加响应发送完成的回调
问题2: Windows防火墙
现象
- 在Windows上运行测试时,防火墙会弹出确认对话框
- 需要手动点击"允许访问"
解决方案
- 手动允许程序通过防火墙
- 在防火墙设置中添加例外
- 使用管理员权限运行测试
调试建议
-
启用详细日志
- 设置日志级别为debug
- 查看服务器和客户端的详细日志
- 检查响应是否真的发送了
-
使用网络抓包工具
- 使用Wireshark或tcpdump抓包
- 检查网络数据包
- 确认响应是否真的发送了
-
简化测试
- 创建最简单的测试用例
- 逐步添加功能
- 定位问题所在
-
检查gnet文档
- 查看gnet v2的文档
- 了解AsyncWrite的机制
- 确认是否需要刷新或触发