서블릿 컨테이너가 독립 실행 형 서버로 작동 할 때 활성 상태가 지속되지 않는다고 가정하면 전체 응답이 클라이언트에 전송 될 때까지 서블릿의 스레드가 해제되지 않는다고 가정합니다 (예 : 웹 브라우저) . 이것은 올바른 가정입니까?언제 서블릿이 스레드를 해제합니까
하지만 서블릿이 Nginx와 같은 역방향 프록시 뒤에 있으면 어떻게됩니까? 응답이 Nginx에 전달되면 스레드가 해제 되나요? 아니면 응답이 최종 클라이언트 (예 : 브라우저)에 전송 될 때까지 대기 중입니까?
업데이트 : 조금 더 명확하게 해 드리겠습니다.
서블릿에서 nginx와 같은 프록시로 응답을 보내려면 단지 밀리 초 (2ms)가 걸립니다. 그러나 nginx에서 브라우저로 최종 응답을 보내려면 추가로 80ms가 걸릴 수 있습니다. 서블릿은 일단 응답이 nginx로 보내지면 스레드/스트림을 릴리스합니까? 아니면 응답이 브라우저에 전송 될 때까지 서블릿이 응답하지 않습니다 (즉, 전체 80ms)
컨테이너가 프록시 뒤에 있다는 것을 알지 못하므로이 점이 아무런 차이가 없습니다. 일반적으로 컨테이너는 스레드 풀을 사용하므로 스레드가 무기한 보관됩니다. –
하지만 서블릿의 출력은 먼저 nginx 버퍼/스트림으로 이동합니까? 서블릿은 응답이 완전히 보내 졌다고 생각할 수 있으므로 서블릿은 스트림을 닫고 스레드를 풀로 해제합니다. nginx와 서블릿 간의 통신은 몇 밀리 초가 걸리는 반면 최종 응답이 브라우저에 도달하는 데는 80 마일이 필요합니다. 서블릿이 연결/스레드 전체를 유지하는지 아니면 Nginx로 보내는 데 걸리는 시간인지를 나타냅니다. – adamSpline