2016-06-26 3 views
1

Java 서버가있는 웹 응용 프로그램이 있고 Java 응용 프로그램이 웹에서 요청을 받고 있습니다.인스턴스에 액세스하는 요청 수를 제한하는 방법은 무엇입니까?

문제는 매번 한 번만 요청을 처리 할 수있는 개체의 인스턴스가 있고 개체가 작업을 완료하기 전에 웹 요청이 오는 문제입니다.

이러한 요청에 대해 일종의 "연결 풀"을 만들려면 어떻게해야합니까? 아니면이 객체 인스턴스에 대한 액세스를 제한 할 수있는 다른 방법이 있습니까?

일부 메서드에서 동기화 된 선언을 사용하고 있지만 작업이 잘되어 있지만 문제가있는 것은 아닙니다. 이 방법으로 들어오는 요청의 순서를 제어하려면 어떻게해야합니까?

+1

디자인을 다시 생각하십시오. 요청을 제한하는 것은 가능한 한 성능에 좋지 않습니다. – Henry

+0

기본 개체 풀을 구현할 수 있습니다. 아파치는 도움이 될 [commons pool] (https://commons.apache.org/proper/commons-pool/)을 가지고 있습니다. –

+1

동기화. 세마포어. 재 설계하여 단일 객체가 없도록하십시오. 너무 넓은. – EJP

답변

1

synchronized 키워드를 사용하여 모든 요청 스레드가 공유하는 방법을 동기화하려고 할 수 있습니다. 이 단점은 공연에 영향을 미친다는 것입니다. 동기화 된 블록을 작게 유지하려고 노력하십시오.

1

요청을 명령으로 간주하여 대기열에 저장하고 1을 1로 처리 할 수 ​​있습니다. 이는 응답 시간이 늘어날 것으로 사용자에게 (이미 언급 한 바와 같이) 결과가됩니다. 이를 극복하기 위해 명령 처리가 비동기 적으로 수행 될 수 있습니다. 즉 사용자가 명령을 호출하고 명령이 올바르게 수신되었음을 알리는 응답을 얻습니다. 서버가 명령을 처리하면 서버는 사용자에게 콜백하여 명령이 (성공적으로) 처리되었음을 알릴 수 있습니다.

이것은 복잡한 솔루션이 될 수 있으며 싱글 톤을 제거/리팩터링 할 수 없는지 확인하는 것이 좋습니다.

관련 문제