我有一个反DDOS规则在我的服务器与最大20个请求在1秒。
在我的flutter程序中,我想调用一个API n次,但有时n大于20。如何避免一些问题
这里我的代码(不工作似乎)
// Search token informations
final tokenMap = <String, Token>{};
var antiSpam = 0;
final getTokens = await Future.wait(
tokenAddressList.toSet().map((final tokenAddress) async {
if (antiSpam > 0 && antiSpam % 19 == 1) {
return Future.delayed(const Duration(seconds: 1));
} else {
antiSpam++;
return sl.get<ApiService>().getToken(
[tokenAddress],
);
}
}),
);
1条答案
按热度按时间u3r8eeie1#
您的实现将无法按预期工作,因为
Future.delayed
函数没有暂停代码的执行,而是计划在经过一定的持续时间后调用函数。使用
Future.wait
而不使用forLoop
可能无法实现将请求数限制为每秒20的预期效果,因为所有API调用都是并行的,将同时启动,并且仍可能超过速率限制。要实现您的目标,可以在
forLoop
中使用async
和await
,并按顺序添加所有API调用,每20个请求延迟1秒。下面是一个如何修改代码以实现此目的的示例: