2015-09-08 9 views
0

После эксперимента с моим сервером JBoss 5.1 я заметил, что ответы HTTP содержат заголовок , если текущий поток является последним доступным.JBoss предотвращает сохранение жизни, когда больше нет доступных потоков

Например, если я установил maxThreads="4" в the HTTP connector config и выполнять более 4 simulatenous запросов, то:

  • 3 первых ответы не содержат какой-либо Connection заголовка (что означает соединение может быть reused by the client for future requests)
  • все следующие запросы содержат заголовок Connection: close (это означает, что клиенту необходимо будет создать новое соединение на другом порту для следующего запроса)

Я не мог найти документацию для этого. Это объясняется каким-то образом? И можно ли избежать этого (т. Е. Предотвратить этот заголовок Connection: close), чтобы клиенты могли повторно использовать сокеты для будущих запросов?

ответ

0

Я быстро просмотрел Tomcat code (на котором находится JbossWeb, веб-контейнер Jboss).

Это показывает, что Http11Processor не возвращается из метода процесса, если соединение разрешено поддерживать в живых. Таким образом, поддерживаемая связь использует поток для пула HTTP, пока соединение открыто.

Чтобы предотвратить пустую очистку от неактивного поддерживаемого соединения, возможно, пул потоков (я заметил некоторую часть кода, который может сделать это в PooledSender), отключив возможность открыть соединение для последний поток в пуле, прежде чем приступать к обработке нового запроса. В противном случае будет слишком легко заблокировать Tomcat/Jboss, создав ограниченное количество поддерживаемых соединений.