2011-03-26 11 views
7

Estoy corriendo un servidor de amarre incorporado (embarcadero 6.1.24) dentro de mi aplicación como esta:cómo configurar el tiempo de espera de conexión/solicitud para el servidor de embarcadero?

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(); 

me gustaría establecer un valor de tiempo de espera (2 segundos), de modo que si handler.handle método() demora más de 2 segundos, el servidor Jetty tendrá un tiempo de espera y responderá al cliente con un código HTTP de 408 (solicitud de tiempo de espera).

Esto es para garantizar que mi aplicación no retendrá la solicitud del cliente durante mucho tiempo y siempre responderá en 2 segundos.

Hice algunas investigaciones y lo probé con "connector.setMaxIdleTime (2000);" pero no funciona.

+0

Encontré un ejemplo de código [aquí] (http://eclipsesource.com/blogs/2009/10/02/executable-wars-with-jetty/) que podría ser útil para usted – FrVaBe

+1

por favor no intente resolver esto usando el embarcadero 6 ... que ha estado sin mantenimiento durante años y ha habido más de 150 lanzamientos desde entonces, considere usar el Jetty 7, el Jetty 8 o incluso el mejor Jetty 9. Docs para Jetty 9 está aquí: https://www.eclipse.org/jetty/documentation/current/index.html –

+0

¿ha encontrado la manera de hacerlo? - @ "Hung Duong" – Udy

Respuesta

1

Tome un vistazo a la API para SelectChannelConnector (el embarcadero):

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

He intentado localizar cualquier característica de tiempo de espera del canal (que controla las conexiones entrantes): setMaxIdleTime(), setLowResourceMaxIdleTime () y setSoLingerTime() están disponibles, aparece.

NOTA: el motivo por el que la función de tiempo de espera no funciona tiene que ver con la naturaleza del socket en su sistema operativo. Tal vez incluso la naturaleza de Jetty (lo he leído en alguna parte, pero no recuerdo dónde estaba).

NOTA 2: no estoy seguro de por qué intenta limitar el tiempo de espera, quizás un mejor enfoque es limitar los tamaños de búfer? Si está intentando evitar la denegación de servicio ...

Cuestiones relacionadas