-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
添加主域名{{mdomain}}动态变量;新增QPS限制,限制每秒的请求数;优化配置面板,页面支持上下滚动;版本号更新至0.4.3版本。
- Loading branch information
Showing
18 changed files
with
515 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package burp.vaycore.common.helper; | ||
|
||
/** | ||
* QPS 限制器 | ||
* <p> | ||
* Created by vaycore on 2023-02-23. | ||
*/ | ||
public class QpsLimiter { | ||
|
||
/** | ||
* 以每秒的间隔计算 | ||
*/ | ||
private static final long PERIOD = 1000; | ||
|
||
/** | ||
* 接受请求时间窗口 | ||
*/ | ||
private final long[] accessTime; | ||
|
||
/** | ||
* 限制数量,最低为1 | ||
*/ | ||
private final int limit; | ||
|
||
/** | ||
* 指向最早请求时间的位置 | ||
*/ | ||
private int position; | ||
|
||
public QpsLimiter(int limit) { | ||
if (limit <= 0) { | ||
throw new IllegalArgumentException("Illegal limit value: " + limit); | ||
} | ||
this.position = 0; | ||
this.limit = limit; | ||
this.accessTime = new long[limit]; | ||
} | ||
|
||
/** | ||
* 对执行点进行限制 | ||
*/ | ||
public void limit() { | ||
long sleepMillis = 0; | ||
synchronized (QpsLimiter.class) { | ||
long curTime = System.currentTimeMillis(); | ||
if (curTime - this.accessTime[this.position] < PERIOD) { | ||
// 未达到处理间隔, 计算休眠间隔剩余时间 | ||
sleepMillis = PERIOD - (curTime - this.accessTime[this.position]) + 1; | ||
curTime = System.currentTimeMillis() + sleepMillis; | ||
} | ||
this.accessTime[this.position++] = curTime; | ||
this.position = this.position % this.limit; | ||
} | ||
// 如果为0,没必要sleep | ||
if (sleepMillis > 0) { | ||
try { | ||
Thread.sleep(sleepMillis); | ||
} catch (InterruptedException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.