0

この質問は少しクレイジーに聞こえるかもしれませんが、時間とエネルギーを節約したいだけです。接続を開くにはモバイル デバイスで時間とエネルギーが必要なので、可能であれば開いている接続を再利用したいと考えています。

と からファイルをダウンロードする必要がある場合がありexample.comますexample.net。両方のサイトが同じサーバー/IP でホストされているため、1 回の接続で両方のドキュメントからドキュメントを取得できるはずです。

DefaultHttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("http://example.com/robots.txt");
HttpGet get2 = new HttpGet("http://example.net/robots.txt");
URI uri = get.getURI();
HttpHost host = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
ResponseHandler<String> responseHandler = new BasicResponseHandler();
HttpResponse response = client.execute(host, get);
String data = responseHandler.handleResponse(response);
Log.v("test", "Downloaded " + data.length() + " bytes from " + get.getURI().toASCIIString());
response = client.execute(host, get2);
data = responseHandler.handleResponse(response);
Log.v("test", "Downloaded " + data.length() + " bytes from " + get2.getURI().toASCIIString());

HttpHost問題は、通話ごとに新しい接続が確立されることを使用しない場合です。両方のHostHTTP ヘッダーが最初のドメインを指している場合。どうすれば修正できますか?

4

1 に答える 1

0

解決策は静かでシンプルです(あなたがそれを見つけた場合):

HttpGet get2 = new HttpGet("http://example.com/robots.txt");
BasicHttpParams params = new BasicHttpParams();
params.setParameter(ClientPNames.VIRTUAL_HOST, new HttpHost("example.net", -1, "http"));
get2.setParams(params);

そのため、接続は同じドメイン/ポート/スキーマであり、DefaultHttpClientそのパラメータを検索するため、再利用されますClientPNames.VIRTUAL_HOST

code.google.comで見つけることであるアンドロイドによって実際に使用されているソースコードで解決策を見つけました。

于 2012-11-08T16:08:50.403 に答える