2011-03-26 89 views
7

我我的应用程序内运行的嵌入式服务器码头(码头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秒钟,码头服务器将超时并响应408客户端的http代码(请求超时)。

这是为了保证我的应用程序不会长时间持有客户端请求,并且总是在2秒内响应。

我做了一些研究,并用“connector.setMaxIdleTime(2000)”进行了测试;但它不起作用。

+0

我找到了一个代码示例[here](http://eclipsesource.com/blogs/2009/10/02/executable-wars-with-jetty/)这可能对你有所帮助。 – FrVaBe 2011-05-04 20:07:42

+1

请不要开始尝试使用码头6来解决这个问题......已经超过了多年的维护时间,并且自那时起已经有超过150个版本,请考虑使用Jetty 7,Jetty 8或甚至更好的Jetty 9。有关Jetty 9的文档,请访问https://www.eclipse.org/jetty/documentation/current/index.html – 2013-08-17 18:02:42

+0

您是否找到了实现它的方法? - @“洪阳” – Udy 2013-12-01 12:33:22

回答

1

看一看为SelectChannelConnector(码头)的API:

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

我试图找到信道(它控制传入连接)的任何超时特征:setMaxIdleTime(),setLowResourceMaxIdleTime( )和setSoLingerTime()可用。

注意:超时功能不起作用的原因与操作系统上套接字的性质有关。也许即使是Jetty的本质(我已经在某处阅读了它,但不记得它在哪里)。注2:我不确定你为什么试图限制超时,也许更好的方法是限制缓冲区大小?如果您试图防止拒绝服务...