Использование запросов Сообщения HTTP HttpClient занимает 2 секунды, почему?

Обновление: Найденный ответом самостоятельно, посмотрите ниже :-)

Привет,

I'am, в настоящее время кодирующий приложение для Android, которое отправляет материал в фоновом режиме с помощью Сообщения HTTP и AsyncTask. Я использую org.apache.http.client Пакет для этого. Я основывал свой код этого примера.

В основном мой код похож на это:

public void postData() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://192.168.1.137:8880/form");

    try {
        List nameValuePairs = new ArrayList(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
     Log.e(TAG,e.toString());
    } catch (IOException e) {
     Log.e(TAG,e.toString());
    }
}

Проблема состоит в том что httpclient.execute (..) строка берет приблизительно 1,5 к 3 секундам, и я не понимаю почему. Просто запрос страницы с HTTP Добирается, берет приблизительно приблизительно 80 мс, таким образом, проблема, кажется, не сама сетевая задержка.

Проблема, кажется, не находится на стороне сервера также, я также попытался ОТПРАВИТЬ данные на http://www.disney.com/ со столь же медленными результатами. И Firebug показывает время отклика на 1 мс при РЕГИСТРАЦИИ данных на мой сервер локально.

Это происходит на Эмуляторе и с моим Nexus One (оба с Android 2.2).

Если Вы хотите посмотреть на полный код, я поместил его на GitHub.

Это - просто фиктивная программа, чтобы сделать Сообщение HTTP в фоновом режиме с помощью AsyncTask на нажатии кнопки. Это - мое первое приложение для Android и мой первый код Java в течение долгого времени. И incidentially, также мой первый вопрос на Stackoverflow ;-)

Какие-либо идеи, почему httpclient.execute (httppost) занимает много времени?

41
задан pableu 15 June 2010 в 16:58
поделиться

1 ответ

Хорошо, я решил это сам, проведя дополнительное расследование. Все, что мне нужно было сделать, это добавить параметр, который устанавливает версию HTTP в 1.1, как показано ниже:

HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpClient httpclient = new DefaultHttpClient(params);

Я нашел это благодаря очень красивому HttpHelper Class от and-bookworm и некоторым пробным и- ошибка.

Если я правильно помню, HTTP 1.0 открывает новое TCP-соединение для каждого запроса. Объясняет ли это большую задержку?

Запрос HTTP POST теперь занимает от 50 до 150 мс по WLAN и от 300 до 500 мс по 3G.

55
ответ дан 27 November 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: