2011-05-11 6 views
0

GWT RCP를 사용하여 GWT에서 웹 응용 프로그램 빌드를 개발 중입니다. 응용 프로그램은 인스턴트 메시징을 위해 설계되었습니다.대기열에서 서블릿 대기 요청

메시지에서 servlete를 대기 중이고 해당 채널을 다시 구독하면 모든 것이 계획대로 작동합니다. 서버에서 요청을 기다리는 수가 5 개를 초과하는 경우에도 6 번째 요청이 처리되기 시작하지 않고 이전 요청 중 하나가 처리 될 때까지 대기합니다. 문제가 redis (jedis 라이브러리를 사용하고 있습니다)에 있는지 잘 모릅니다. 그러므로 currentThread에서 수면을 직접 호출하려고했으나 같은 동작을 보였습니다.

public class TestServiceImpl extends RemoteServiceServlet implements 
      TestService { 

    @Override 
    public void syncWait(Date time) { 
     try{ 
      Thread.currentThread().sleep(10000l); 
     }catch (Exception e) { 
      getLogger().error("sleep error", e); 
     } 
     return ; 
    } 
} 

5 개의 요청이 열릴 때 정적 인 내용을로드하지 않는 것은 특정 서블릿뿐 아닙니다. 나는 jety, glassfish와 바람둥이에 그것을 시험해 보았다.

글래스 피쉬의 threadpool 설정을 변경하려고했는데 maxthread-count를 200으로 설정했지만 작동하지 않았습니다.

세션 및 서버 당 처리되는 요청 수를 늘리는 방법에 대한 조언을 구할 수 있습니까?

답변

0

이렇게하려면 서블릿 Comet 구현과 NIO 커넥터 중 하나를 사용해야합니다. Glassfish 나 Jetty에 익숙하지 않지만 Tomcat에서는 APR (http://tomcat.apache.org/tomcat-6.0-doc/apr.html 참조)과 고급 IO (http://tomcat.apache.org/tomcat-6.0-doc/aio.html 참조)를 조합하여 원하는 것을 할 수 있습니다.

Tomcat의 고급 IO를 사용하는 것이 표준 Servlet 2.5 API보다 복잡하고 문서화가 잘 안된다는 점에 유의하십시오.

Resin, Tomcat 7 및 Glassfish (저는 믿습니다)는 유사한 기능에 대한 지원을 제공하는 Servlet 3.0 사양을 지원합니다.

+0

답해 주셔서 감사합니다. 그러나 Comet과 NIO가 필요한지 확실하지 않습니다. Comet은 동시 요청을 처리하기위한 것입니다. 동시 요청을 처리 할 필요가 없습니다. 서버가 5 개의 연결을 열었을 때 요청 처리를 시작하는 데 문제가 있습니다. 이것에 대한 혜성 해결책은 무엇입니까? – LuiGi

+0

일반적으로 서블릿의 쓰레드에서 'sleep'을 호출하는 것은 나쁜 생각입니다. 다중 요청이 유휴 상태라면 Comet과 NIO가 필요합니다. 5 개 이상의 연결에 관해서는 5 개 이상의 연결을 확실히 처리 할 수 ​​있어야하므로 어딘가에 구성 결함이 있어야합니다. – Femi

관련 문제