2

제 생각에 Tomcat에서 각 요청은 하나의 Java/(따라서 OS) 스레드를 사용합니다.Tomcat - 요청 당 하나의 스레드 - 또는 다른 대안?

은 변경할 수있는 방법이 있나요 내가 장기 실행 요청이 많은 응용 프로그램이 등

게임 내 채팅을 포함한다 (예를 들어 여러 플레이어와 포커 게임), 그리고 AJAX 롱 폴링 상상 바람둥이 구성/내 webapp에 대한 아키텍처 그래서 그들은 각 요청에 대한 스레드를 사용하지 않을거야 '요격'요청 및 응답 그래서 그들은 큐의 일부로 처리 할 수 ​​있습니까?

+1

나는 직장에서 최근에 같은 질문을했다. 나는이 기사를 읽고 그것은 내 질문의 많은 답변 : http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html –

+0

만약 당신이 긴 요청을 가지고 왜 당신은 모든 다른 요청과 함께 대기열에 추가되고 다른 모든 요청/스레드와 관련하여 비동기 적으로 실행되는 자체 스레드에 배치되지 않길 원하십니까? –

답변

5

당신은 바람둥이가 자신의 스레드에서 각 요청을 처리하는 것을 좋아한다고 생각합니다. 여러 개의 동시 스레드에서 문제가 될 수 있습니다. 다음 제안 사항이 있습니다.

  • server.xml의 Connector 요소의 maxThreads 및 acceptCount 속성을 구성합니다. 이 방법으로 스폰 된 스레드 수가 임계 값으로 제한됩니다. 한도에 도달하면 요청이 대기열에 들어갑니다. acceptCount 속성은이 대기열 크기를 설정합니다. 구현하기에 가장 간단하지만 좋은 장기 솔루션이 아님

  • server.xml에 여러 Connector 요소를 구성하고 server.xml에 Executor 요소를 추가하여 thread 풀을 공유하도록합니다. Tomcat이 Executor 인터페이스를 구현하도록 지시하고 싶을 것이다.

  • 요청을 처리하는 방법을 더 세밀하게 제어하려면 고유 한 커넥터 구현을 고려하십시오. server.xml의 Connector 요소의 'protocol'속성은 새 커넥터를 가리켜 야합니다. 사용자 지정 SSL 커넥터를 추가하기 위해이 작업을 수행했으며이 작업은 훌륭합니다.

  • tomcat을 요청/연결의 수로 확장 할 수 있도록 일반적인 요구 사항으로이 문제를 줄이시겠습니까? 일반적인 해결책은로드 밸런서를 구성하여 여러 개의 Tomcat 인스턴스를 처리하는 것입니다.