12

次のように、アプリケーション内で組み込みの 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 サーバーがタイムアウトし、408 http コード (要求タイムアウト) でクライアントに応答するようにします。

これは、アプリケーションがクライアント リクエストを長時間保持せず、常に 2 秒以内に応答することを保証するためです。

私はいくつかの調査を行い、「connector.setMaxIdleTime(2000);」でテストしました。しかし、うまくいきません。

4

2 に答える 2

3

SelectChannelConnector (Jetty) の API を見てみましょう。

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

チャネルのタイムアウト機能 (着信接続を制御する) を見つけようとしました: setMaxIdleTime()、setLowResourceMaxIdleTime()、および setSoLingerTime() が利用可能です。

注: タイムアウト機能が機能しない理由は、オペレーティング システムのソケットの性質に関係しています。おそらく、Jetty の性質 (どこかで読んだことがありますが、どこにあったか思い出せません)。

注2: タイムアウトを制限しようとする理由がわかりません。おそらく、より良いアプローチはバッファサイズを制限することですか? サービス拒否を防止しようとしている場合...

于 2012-02-10T22:15:27.533 に答える