5

以下の Jetty のドキュメントの例では、効率的な非同期 HTTP 要求を実行する簡単な方法が説明されています。ただし、この例ではサーバーの応答を実際に取得する方法が指定されていないため、理解できないようです。

Result オブジェクトには getResponse() と getRequest() がありますが、どちらにもコンテンツにアクセスするメソッドはありません。

誰でも知っていますか?


Jetty のドキュメント

単純な非同期 GET リクエストは、次のように記述できます。

httpClient.newRequest("http://domain.com/path")
        .send(new Response.CompleteListener()
        {
            @Override
            public void onComplete(Result result)
            {
                // Your logic here
            }
        });

メソッド Request.send(Response.CompleteListener) は void を返し、ブロックしません。パラメーターとして提供される Response.CompleteListener は、要求/応答の会話が完了すると通知され、Result パラメーターを使用して応答オブジェクトにアクセスできます。

4

2 に答える 2

0

以前の回答 (最初の日付: 2013-06_Jun-24) から始めることができますが、現在の (Jetty v9.2) ドキュメントに示されている以上のことが必要です。

最初に必要なのは、HttpClient を呼び出して処理を終了/終了する方法です。CompleteListener の終了後にHttpClient.stop()を呼び出す必要があります。それだけの場合、コードがクラッシュすることがあります (Java 例外)。HttpClient を適切に閉じるための信頼できる方法の 1 つを次に示します。

HttpClient.stop() メソッドを呼び出す必要があります。そうしないと、Jetty によって JVM のスレッド (またはリソース) が枯渇する可能性があります。これはここで議論された問題でした:

また、並行処理の状況でスレッドが「適切に機能する」ようにするために、ちょっとした家事をすることも重要です。

于 2014-10-29T23:16:41.733 に答える