Низкая скорость загрузки с использованием методов публикации HttpClient, Jame Mime4j и HttpPost - PullRequest
0 голосов
/ 09 февраля 2010

Я загружаю многокомпонентный кусок данных с помощью HttpPost и передаю его в метод выполнения объектов HttpClient следующим образом:

HttpPost loginPost = new HttpPost(LOGIN_URL);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("_email", mEmailAddress));
params.add(new BasicNameValuePair("lpassword", mPassword));

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8");

loginPost.setEntity(entity);
HttpResponse resp = mHttpClient.execute(loginPost);

HttpPost post = new HttpPost(UPLOAD_URL);
FileBody bin = new FileBody(file);
MultipartEntity me = new MultipartEntity();

me.addPart("stuff", new StringBody(stuff));
me.addPart("file", bin);

post.setEntity(new RequestEntityEx(me, handler));
mHttpClient.execute(post);

Теперь, вход в систему и публикация работы - хорошо, но загрузка мучительно медленная. Я проверил свое интернет-соединение, и оно намного медленнее, чем должно быть (приблизительная скорость составляет 1 МБ / с, загрузка файла 3 МБ занимает около 5 минут (а не 30 с).

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 03 августа 2010

Я обнаружил, что HttpClient примерно в 9 раз медленнее, чем обычный путь на https. Я понятия не имею, почему, кто-нибудь знает, что случилось.

Вот в основном мой код

private static HttpClient httpClient = new DefaultHttpClient();
private static HttpPost httpPost = new HttpPost(RRD_URL);

    public static String sendData(List<NameValuePair> data) {
    StringBuffer buffer = new StringBuffer();
    BufferedReader rd = null;
    try {
        httpPost.setEntity(new UrlEncodedFormEntity(data));
        HttpResponse httpResponse = httpClient.execute(httpPost);

        rd = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
        String line;
        while ((line = rd.readLine()) != null) {
            buffer.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace(System.out);
    } finally {
        try {
            if (rd != null) {
                rd.close();
            }
        } catch (IOException e) {
            e.printStackTrace(System.out);
        }
    }

    return buffer.toString();
}
...