2015-12-15 2 views
0

Мы используем tomcat 7.0.67, который является почти последней версией tomcat tomcat7. Мы обнаружили, что после того, как мы выполнили некоторое тестирование производительности, tomcat не отправляет исправленный ответ. Он не отправляет обратно «последний кусок», который должен быть длиной ZERO. Проблема продолжается, когда на сервере tomcat нет запросов. Кто-нибудь когда-нибудь видел это? Есть ли обходной путь?tomcat не отправляет последний кусок для ответного ответа

+0

Или может кто-нибудь указать мне, что такое код в tomcat относительно вычисления chunked-ответа, чтобы мы могли отлаживать это? – goodier

ответ

0

Я нашел причину. Мы используем задачу Async. В потоке переднего плана мы вызываем ServletOutputStream.flush в некоторых случаях. В tomcat ServletOutputStream.flush заставит tomcat приступить к вычислению необходимого выходного фильтра tomcat. IdentityOutputFilter используется для ответа без ответа. IdentityOutputFilter будет использоваться, если есть заголовок «connection: close» или «content-length», установленный при запуске. ChunkedOutputFilter используется для ответного ответа

Но фоновый поток может обрабатываться и использовать ServletOutputStream. Этот преждевременный флеш в некоторых случаях сделает Tomcat прикованным IdentityOutputFilter и ChunkedOutputFilter. Этого нельзя ожидать от tomcat, и реакция с помехами перестает работать.

Обходной путь не является вызовом флеша в потоке переднего плана, но я считаю, что он все еще является ошибкой tomcat, потому что tomcat chunked response не должен прекращать работу, даже вызовы webapp не срабатывают преждевременно.

Смежные вопросы