Skip to content

Conversation

@undertaker86001
Copy link

Related to issue-275

限流器说明

本目录包含了ioGame框架中三种自适应限流算法的完整单元测试。

测试结构

1. 单元测试类

  • GradientRateLimiterTest.java - Gradient算法单元测试
  • Gradient2RateLimiterTest.java - Gradient2算法单元测试
  • VegasRateLimiterTest.java - Vegas算法单元测试
  • RateLimiterIntegrationTest.java - 集成测试,测试所有算法

2. 测试配置文件

  • test-config.properties - 测试配置参数

测试覆盖范围

基础功能测试

  • ✅ 初始状态验证
  • ✅ 连接获取和释放
  • ✅ 连接生命周期管理
  • ✅ RTT记录和统计
  • ✅ 启动和停止功能

算法特性测试

  • ✅ Gradient算法核心逻辑
  • ✅ Gradient2指数移动平均
  • ✅ Vegas动态阈值计算
  • ✅ 队列大小计算
  • ✅ 限流阈值调整

边界条件测试

  • ✅ 最小/最大阈值限制
  • ✅ 连接数上限处理
  • ✅ 拒绝连接统计
  • ✅ 资源约束应用

性能测试

  • ✅ 大量操作性能
  • ✅ 并发访问安全性
  • ✅ 内存使用监控
  • ✅ 算法收敛性

运行测试

前置条件

确保项目依赖已安装:

mvn clean install

运行所有测试

mvn test

运行特定测试类

# 运行Gradient算法测试
mvn test -Dtest=GradientRateLimiterTest

# 运行Gradient2算法测试  
mvn test -Dtest=Gradient2RateLimiterTest

# 运行Vegas算法测试
mvn test -Dtest=VegasRateLimiterTest

# 运行集成测试
mvn test -Dtest=RateLimiterIntegrationTest

运行特定测试方法

# 运行特定测试方法
mvn test -Dtest=GradientRateLimiterTest#testInitialState

# 运行多个测试方法
mvn test -Dtest=GradientRateLimiterTest#testInitialState,testTryAcquire

@iohao
Copy link
Owner

iohao commented Aug 16, 2025

感谢你的 PR,代码写得很漂亮,注释也全。

该方案可能不太适用于长连接,这是因为玩家连接上来后,系统不会强制玩家下线。

简单点的做法是预估一个大概的上限人数,类似 #275 提到的 MyOnlineTotalLimitHandler
如果采用比较动态的做法会引发一些问题,如

  1. 在玩家集体请求不频繁时,让原本只能承载 1000 的玩家,会接收更多的玩家连接,此时可能会超出该承载值。
  2. 当玩家连接超出该值时,之后在回归正常请求频率或突然频繁请求,系统可能消费不了这么多,存在一定的风险。

或许可以把该 PR 做成一个单独的库,让其他开发者按需引入。
另外,该方案或许可以用在 #276 上。

@undertaker86001
Copy link
Author

@iohao 刚看到的您的消息。这段时间在忙,我需要一点时间想想。可否加个您的微信沟通呢?

@iohao
Copy link
Owner

iohao commented Aug 18, 2025

@undertaker86001 微信不常用,加 Q 可以吗。

@undertaker86001
Copy link
Author

@undertaker86001 微信不常用,加 Q 可以吗。

可以的 我Q:2664504212

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants