如何为jetty服务器设置连接/请求超时?

Hun*_*ong 10 jetty embedded-jetty connection-timeout

我正在我的应用程序中运行嵌入式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();
Run Code Online (Sandbox Code Playgroud)

我想设置一个超时值(2秒),这样如果handler.handle()方法需要超过2秒,则jetty服务器将超时并使用408 http代码(请求超时)响应客户端.

这是为了保证我的应用程序不会长时间保持客户端请求并始终在2秒内响应.

我做了一些研究并用"connector.setMaxIdleTime(2000);"测试了它.但它不起作用.

Den*_*nis 3

看一下 SelectChannelConnector (Jetty) 的 API:

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

我尝试找到通道的任何超时功能(控制传入连接):setMaxIdleTime()、setLowResourceMaxIdleTime() 和 setSoLingerTime() 似乎可用。

注意:超时功能不起作用的原因与操作系统上套接字的性质有关。也许甚至是码头的本质(我在某处读过它,但不记得它在哪里)。

注意2:我不确定你为什么尝试限制超时,也许更好的方法是限制缓冲区大小?如果您想防止拒绝服务......