我想知道如何在Java中限制每个客户端(特定IP)的TCP请求。例如,我希望为每个客户端IP允许在Y秒内最多X个请求。我考虑使用静态计时器/计时器任务与临时受限IP的哈希集合相结合。
private static final Set<InetAddress> restrictedIPs = Collections.synchronizedSet(new HashSet<InetAddress>());
private static final Timer restrictTimer = new Timer();
所以当用户连接到服务器时,我将他的IP添加到限制列表中,并启动一项任务,在X秒钟后取消限制。
restrictedIPs.add(socket.getInetAddress());
restrictTimer.schedule(new TimerTask()
{
public void run()
{
restrictedIPs.remove(socket.getInetAddress());
}
}, MIN_REQUEST_INTERVAL);
我的问题在于,当任务运行时,套接字对象可能已经关闭,远程IP地址将不再可访问...
欢迎任何想法!此外,如果有人知道使用Java框架内置的方法来实现这一点,我很想听听。