合理的にHttpUrlConnection開永遠隔休endpoint?
-
23-08-2019 - |
質問
さんの最適化プロセスが継続的に、頻繁に通話(>1秒当たりの平均)外部API経由で簡単に休憩スタイルHTTPます。ひとつ気づいたのは、現在、HttpUrlConnectionの作成を終べてのAPI呼び出しとしては、以下のように構造(非必須のコードとエラー処理を除去した読みやすさ).
//every API call
try {
URL url = new URL("..remote_site..");
conn = (HttpURLConnection) url.openConnection();
setupConnectionOptions(conn); //sets things like timeoout and usecaches false
outputWriter = new OutputStreamWriter(new BufferedOutputStream(conn.getOutputStream()));
//send request
} finally {
conn.disconnect();
outputWriter.close();
}
いについて豊富な取扱い実績があるhttpプロトコルに直接タッフが常識や知識のソケットは一般のものだと思うが、より効率的にのみの接続を一度再利用しみを初期化される問題を避けるための接続交渉は、このように:
//on startup, or error
private void initializeConnection()
{
URL url = new URL("..remote_site..");
conn = (HttpURLConnection) url.openConnection();
setupConnectionOptions(conn); //sets things like timeoout and usecaches false
}
//per request
try {
outputWriter = new OutputStreamWriter(new BufferedOutputStream(conn.getOutputStream()));
//send request
} catch (IOException) {
try conn.disconnect();
initializeConnection();
} finally {
outputWriter.close();
}
//on graceful exit
conn.disconnect();
私の質問:
- この合理的な最適化般に増加する目)?
仮に有:
- う再利用の出力ストリームなどをしています。
- はなのみを初期化さ接続エラー、またはすればよいので後で一定の要求す。
解決
基本的に、はい、それはさらに悪いSSLで、多大な労力を要しソケットを設定---多くの時間を節約できます。 「キープアライブ」が昔に戻って実装された理由です。これは、RESTの哲学にlitleビットカウンタのですが、それは、パフォーマンスの最適化です。
それについての一つのことは、ソケットが限られたリソースであるということです。本当に重い使用環境では、新しい接続のために残されていないソケットで終わることができました。これは悪いことだ。
所属していません StackOverflow