我可以使用一些伪代码,或者更好的Python.我正在尝试为Python IRC机器人实现速率限制队列,它部分工作,但如果有人触发的消息少于限制(例如,速率限制是每8秒5条消息,而此人只触发4条消息),并且下一个触发器超过8秒(例如,16秒之后),机器人发送消息,但是队列变满并且机器人等待8秒,即使自8秒时间段已经过去也不需要它.
可能/部分重复:
我正在寻找为Web应用程序实现移动时间窗口速率限制算法的最佳方法,以减少垃圾邮件或暴力攻击.
使用的示例是"在过去5分钟内来自给定IP的最大失败登录尝试次数","最近N分钟内的最大((帖子/投票/等等)...").
我宁愿使用移动时间窗口算法,而不是每X分钟重新统计一次(比如twitter api).
这将是一个C#/ ASP.Net应用程序.
我使用datastax java驱动程序3.1.0连接到cassandra集群,我的cassandra集群版本是2.0.10.我与QUORUM一致性异步编写.
private final ExecutorService executorService = Executors.newFixedThreadPool(10);
public void save(String process, int clientid, long deviceid) {
String sql = "insert into storage (process, clientid, deviceid) values (?, ?, ?)";
try {
BoundStatement bs = CacheStatement.getInstance().getStatement(sql);
bs.setConsistencyLevel(ConsistencyLevel.QUORUM);
bs.setString(0, process);
bs.setInt(1, clientid);
bs.setLong(2, deviceid);
ResultSetFuture future = session.executeAsync(bs);
Futures.addCallback(future, new FutureCallback<ResultSet>() {
@Override
public void onSuccess(ResultSet result) {
logger.logInfo("successfully written");
}
@Override
public void onFailure(Throwable t) {
logger.logError("error= ", t);
}
}, executorService);
} catch (Exception ex) {
logger.logError("error= ", ex); …Run Code Online (Sandbox Code Playgroud) java multithreading rate-limiting backpressure datastax-java-driver
当使用HttpWebRequest向一个应用程序服务器发出并行请求时,我需要实现一个限制机制(每秒请求数).我的C#app必须每秒向远程服务器发出不超过80个请求.远程服务管理员强加的限制不是硬限制,而是我平台和他们之间的"SLA".
使用HttpWebRequest时,如何控制每秒的请求数?
我有一个执行一些 IO 的方法,我想限制对这个方法的调用(每秒),以避免后端获得它无法处理的并发请求的爆发。
如果要求没有“每秒”,我可以只使用一个堆栈(基本上只是一个计数器)并offer()在开始请求时和poll()完成时使用。对于“每秒”要求,我需要以某种方式清除堆栈上比给定时间流逝更旧的插槽。
我该如何正确地做到这一点?显然,该结构应该是线程安全的。
感谢您的时间!
我想以编程方式限制Java中的上传或下载操作.我会假设我需要做的就是检查上传的速度和插入方式Thread.sleep(),如下所示:
while (file.hasMoreLines()) {
String line = file.readLine();
for (int i = 0; i < line.length(); i+=128) {
outputStream.writeBytes(line.substr(i, i+128).getBytes());
if (isHittingLimit())
Thread.sleep(500);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码会起作用吗?如果没有,有更好的方法吗?有没有一个描述这个理论的教程?
我知道客户端_underscore.js可以用来限制点击率,但是如何限制服务器端的呼叫呢?我想过使用相同的模式但不幸的是_throttle似乎不允许区分Meteor.userId().
Meteor.methods({
doSomething: function(arg1, arg2){
// how can you throttle this without affecting ALL users
}
);
Run Code Online (Sandbox Code Playgroud) java ×3
algorithm ×2
c# ×2
asp.net ×1
backpressure ×1
java-io ×1
meteor ×1
python ×1
theory ×1
throttling ×1