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

集成测试已知问题

问题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的机制
    • 确认是否需要刷新或触发