Ksoap2 с https использует большую полосу пропускания Как оптимизировать соединения?

Я пишу приложение, которое много раз подключается к веб-службе https, используя ksoap2, и использование данных приложением велико. Я думаю, что это высоко, потому что я делаю соединение каждый раз, когда я вызываю WS.

Есть ли способ использовать одно и то же соединение для моего приложения, например, синглтон или совместное использование объекта HttpTransportSE?

Пример моего кода:

public boolean Call1_Example(String Param1, String Param2)
{

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME24);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);

    request.addProperty("Param1", Param1);
    request.addProperty("Param2", Param2);

    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    Boolean resultado = false;
    Object response;

    try {


        androidHttpTransport.call(Method1_SOAP_ACTION,
                envelope);
        response = envelope.getResponse();
        resultado = Boolean.parseBoolean(response.toString());

    } catch (Exception e) {

        resultado = false;
    }

    return resultado;
}

person David    schedule 18.07.2013    source источник
comment
Вы используете асинхронную задачу или поток для операций, связанных с сетью?   -  person Raghunandan    schedule 18.07.2013
comment
Да, вызов всегда находится в асинтаске. Код работает нормально, но я думаю, что приложение использует большую полосу пропускания.   -  person David    schedule 18.07.2013
comment
Это была ошибка в моем коде, который потреблял данные, а не ksoap2 (я делал http-публикацию каждый раз при запуске приложения). Спасибо за вашу поддержку !!   -  person David    schedule 24.09.2013


Ответы (1)


Я столкнулся с той же проблемой. Мой WS всегда возвращал весь запрошенный мной объект. Поэтому я управляю тем, что сервер сохраняет для каждого объекта его последнее обновленное время, используя System.currentTimeMillis() в каждом сеттере.

Когда вы используете свой WS, вы получаете ответ и сохраняете последнее обновленное время. Для следующего запроса к WS вы отправите это сохраненное время.

Таким образом, сервер отправит вам только разницу. Конечно, это приводит к модификации кода вашего сервера.

Я не знаю, чистое ли это решение, но оно работает нормально. У меня примерно одинаковое время отклика в Wifi и в 3G.

Вы также можете использовать gzip для сжатия сообщения.

HeaderProperty headerProperty=new HeaderProperty("Accept-Encoding", "gzip");

Вы можете увидеть образец здесь

person Groco    schedule 16.09.2013
comment
Это хороший подход, спасибо, но моя проблема заключалась в ошибке с HTTP-запросом каждый раз, когда я запускал приложение. - person David; 24.09.2013