Как установить время ожидания соединения / запроса для сервера Jetty? - PullRequest
8 голосов
/ 26 марта 2011

Я использую встроенный сервер Jetty (Jetty 6.1.24) внутри моего приложения следующим образом:

    Handler handler=new AbstractHandler()
    {
        @Override
        public void handle(String target, HttpServletRequest request,
                HttpServletResponse response, int dispatch)
                throws IOException, ServletException {
              //this can take a long time
              doSomething();  
        }
    };


    Server server = new Server(8080);
    Connector connector = new org.mortbay.jetty.nio.SelectChannelConnector();      
    server.addConnector(connector);

    server.setHandler(handler);
    server.start();

Я хотел бы установить значение тайм-аута (2 секунды), чтобы, если метод handler.handle () занимал более 2 секунд, сервер Jetty тайм-аут и отвечал клиенту с кодом http 408 (тайм-аут запроса).

Это гарантирует, что мое приложение не будет долго удерживать запрос клиента и всегда будет отвечать в течение 2 секунд.

Я провел некоторое исследование и проверил его с помощью "connector.setMaxIdleTime (2000);" но это не работает.

1 Ответ

1 голос
/ 11 февраля 2012

Взгляните на API для SelectChannelConnector (Jetty):

http://download.eclipse.org/jetty/7.6.17.v20150415/apidocs/org/eclipse/jetty/server/nio/SelectChannelConnector.html

Я пытался найти любые функции тайм-аута канала (который контролирует входящие соединения): setMaxIdleTime(), setLowResourceMaxIdleTime () и setSoLingerTime () доступны, как представляется.

ПРИМЕЧАНИЕ. Причина, по которой функция тайм-аута не работает, связана с природой сокета в вашей операционной системе.Возможно, даже характер Jetty (я где-то читал об этом, но не могу вспомнить, где он был).

ПРИМЕЧАНИЕ2: я не уверен, почему вы пытаетесь ограничить время ожидания, возможно, лучший подход ограничиваетразмеры буфера?Если вы пытаетесь предотвратить отказ в обслуживании ...

...