2011-03-26 138 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:我不確定你爲什麼試圖限制超時,也許更好的方法是限制緩衝區大小?如果您試圖防止拒絕服務...