Мне интересно, как ограничить количество запросов TCP для каждого клиента (для конкретного IP) в Java. Например, я хотел бы разрешить максимум X запросов в Y секунд для каждого клиентского IP. Я думал об использовании статического Timer / TimerTask в сочетании с HashSet временных 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-каркас способ достижения этого, я бы очень хотел это услышать.