2013-01-03 9 views
1

나는 트래픽을 형성 할 수있을 것이다 프록시 서버를 만들어야합니다. 주요 쟁점은 다른 서버에 대한 액세스를 제공하는 우선 순위가 다른 대기열을 갖는 것입니다. 계속 -부두 계속 - 일시 중지 요청 - 자원 내 프로젝트에서

내 생각은 비동기 기능과 함께 부두를 사용하는 것입니다. Continuation에는 요청을 일시 중단하고 스레드를 해제하는 옵션이 있습니다. 그런 다음 내 요청을 대기시킬 수 있습니다.

내 주요 관심사는 자원 주위에. Jetty의 요청이 '일시 중지'되면 어떻게됩니까? 그들은 여전히 ​​어떤 스레드가 붙어 있습니까? ... 내 경우 꽤 많은 요청이 대기 할 수 있으며 톰캣의 방법 '의 요청에 따라 스레드는'나를 위해 좋은 해결책이 아니다

당신은 다음의 org.eclipse.jetty.servlets.ProxyServlet 시작, 유사를 확장하는 방법을 볼 수도 있습니다

답변

0

BalancerServlet 및 거기에서 이동하십시오. 이미 많은 비동기/연속 기능을 사용할 수 있습니다. Continuations를 사용하는 방법에 대한 public void service(ServletRequest req, ServletResponse res) 방법에

봐.

+0

당신의 대답 주셔서 대단히 감사합니다. 조금 더 살펴 보았습니다. 최신 버전의 Jetty는 Servlet 3.0 구현에 의존합니다. 이는 요청 실행을 일시 중단하고 RequestThread를 릴리스하고 다른 WorkingThread를 시작하는 startAsync 메소드를 사용함을 의미합니다. [링크] (http://stackoverflow.com/questions/3810448/servlet-3-0-asynchronous)에서 확인할 수 있습니다. 요청을 잠시 저장해야하기 때문에 문제가 해결되지 않습니다. 일반적으로 Netty 프레임 워크와 같은 이벤트 중심 접근 방식이 있습니다. – tRun

+0

계속해서 Servlet 3.0 async에 대해서도 지원됩니다. startAsync()가 호출되면 HTTP 요청이 일시 중단되고 스레드를 처리하는 스레드가 스레드 풀로 반환된다는 것을 알면 스레드 처리를 위해 [0..n] 작업 스레드가있을 수 있습니다. (0 스레드가 처리하면 클라이언트에 시간 초과가 표시됩니다) –

+0

그리고 여기에 문제가 있습니다. HTTP 요청이 일시 중단되었습니다. 즉, 자원을 소비하는 다른 스레드가 제공됩니다. 예 : 100 개의 HTTP 요청을 일시 중단/저장하고 싶습니다. 그렇다면 문자 그대로 아무것도하지 않고 기다리는 100 개의 쓰레드를 소비합니다. 나는 그 요청을 저장해야하며 많은 자원을 소비하지 않아야합니다. – tRun