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