Java의 클라이언트 (특정 IP 당) 당 TCP 요청을 제한하는 방법이 궁금합니다. 예를 들어, 각 클라이언트 IP에 대해 Y 초당 최대 X 개의 요청을 허용하려고합니다. 임시 제한된 IP의 HashSet과 함께 정적 Timer/TimerTask를 사용하는 것을 생각했습니다.IP 당 TCP 요청 제한
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 프레임 워크에 내장 된 방법을 알고 있다면이를 듣고 싶습니다.
답변 해 주셔서 감사합니다. 나는 아마 당신이 말했듯이지도를 할 것이다. – asmo
이 솔루션의 문제점 : 맵에서 IP를 제거 할시기를 결정하는 방법은 무엇입니까? 왜냐하면 서버가 장시간 실행되면 수천 개의 IP 맵으로 끝나기 때문입니다. – asmo
몇 천명이 문제가되어서는 안되지만 걱정이됩니다. 낡은 IP를 모두 지우려면 지금 (1 시간 이상) 정리를 예약 할 수 있습니다. – Marc