这个问题可能听起来有点疯狂,但我只想节省时间和精力。打开连接需要移动设备上的时间和能力,所以我想尽可能重用开放连接。
我可能需要从example.com
和example.net
下载文件。这两个站点都托管在同一台服务器/ ip上,因此只需一个连接即可从两个文档中获取文档。
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
时,每个呼叫都建立了新的连接。如果我使用这两个Host
HTTP标头指向第一个域。我该如何解决这个问题?
答案 0 :(得分: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
。
我找到了一个源代码的解决方案,它实际上是由android使用的,可以在code.google.com找到。