Название: QHttp (проблема с передачай большого к-ва запросов) Отправлено: Kainit от Октябрь 13, 2007, 18:39 Qt 4.3.1 и 4.3.2 (и есть подозрения что и другие версии тоже)
Есть сервлет под TomCat-ом и есть клиент на Qt, использующий QHttp. При передаче последовательно, около 10-15 запросов, в определённый момент QHttp начинает отправлять только заголовок HTTP, не отправляя собственно тела, а поскольку в заголовке указан Content-Lenght, то сервлет ожидает данных, которые не приходят и у сервлета случается SocketTimeoutException (сам сервлет не виноват, смотрел TcpTrace-ом, именно Qt-шный клиент отсылает запросы не отсылая тела). Самое интересное что я подписался на все сигналы QHttp и поглядел на процесс отсылки такого неправильного запроса. requestStarted ID=13 | dataSendProgress total=357 done=229 (здесь total абсолютно правильный и QHttp начинает отправлять хедер) | dataSendProgress total=229 done=229 (а вот здесь почему-то изменился total и я совершенно не понимаю, почему!) | dataReadProgress total=228 done=228 (ответ от сервлета принимается абсолютно нормально) requestFinished ID=13 error=false Сталкивался ли кто-нибудь с такой проблемой? По каким причинам может внезапно, в процессе отправки запроса смениться total? Не подскажете-ли, в какой направлении копать (с выделением памяти всё нормально и QByteArray & data, и QIODevice * to живы всё время выполнения запросами, некорректной работы с памятью нету, проверено Bound Checker-ом)... Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: Kainit от Октябрь 14, 2007, 12:18 Люди, откликнитесь! Неужели никто не встречался с такой проблемой?
Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: ритт от Октябрь 16, 2007, 19:43 отправляется один и тот же пакет или разные? "в определённый момент" - момент всегда одинаковый?
и вообще, приведи код - хоть повторить и проверить можно будет Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: Kainit от Октябрь 17, 2007, 09:49 Пакеты разные, но суть у них одна - заголовок POST и указан Content-Lenght, в теле - небольшой кусок XML, деревце из 10 узлов (для определённости будем считать что это SOAP вызов). Кстати, хорошая мысль, попробую проверить на одинаковых пакетах...
Цитировать "в определённый момент" - момент всегда одинаковый? В том-то и дело что ошибка, так сказать, неповторяемая и моменты каждый раз разные, ибо QHttp неблокируемый и там всё живёт на ивентах, которые приходят когда им вздумается, к тому же нагрузка на сетку непостоянна и запросы идут с разной скоростью. Даже возникла мысль написать в службу поддержки троллей... Цитировать и вообще, приведи код Лады, вечером постараюсь его укоротить до читаемого.Кстати, никто не пытался QHttp проверять с Bound Checker-ом? У меня онпри закрытии сокета QHttp, по завершении запроса, выдаёт очень неприятные ошибки (прога в 2 строчки, чисто QT экзампл), я её тоже вечером приведу. Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: ритт от Октябрь 17, 2007, 12:15 поищи про профилирование на этом форуме - периодически эта тема поднимается и так же периодически завершается примерно одинаково
по теме: я юзаю соап (есс-но ПОСТ-ом и есс-но ХМЛ) - не сильно сложная надстройка над кухттп - ни разу таких проблем не замечал. так что, код будет весьма кстати /*лучше выложи сразу компилируемый код тарболлом куда-нть в шары*/ Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: Kainit от Октябрь 18, 2007, 09:19 Т-а-к, код временно откладывается, ибо не удалось на мини-тесте из 3х строчек получить ту же ошибку, что очень странно (возможно это потому что я сменил Bound Checker на более свежий). Буду думать дальше.
Про профилирование и отлов ликов прочитал, но ни одного вразумительного слова не нашел. Да, большинство пользуется Bound Checker - ом и на этом всё обсуждение ошибок и ликов заканчивается :-). Очень обидно что никто не предложил другого средства для винды, ибо на большом проекте баунд чекеру откровенно тяжело работать (тот же Code Guard из Borland-а работает на порядке быстрее). Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: Tonal от Октябрь 18, 2007, 11:36 Ну и глючность у него фирменная багландовская. ;-)
Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: Kainit от Октябрь 18, 2007, 12:06 Цитировать Ну и глючность у него фирменная багландовская. ;-) С этим не поспоришь. Code Guard у меня такие лики пропускал, что закачаешься. Но зато быстро работает и всё-таки процентов 80-90 багов ловит. А вот Bound Checker у меня только стартует минуту...Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: Kainit от Январь 09, 2008, 13:05 Сорри, даже забыл что задавал вопрос, а сейчас, после структуризации форума он как-то наверх вылез.
Проблема, разумеется, была решена и я в двух словах расскажу в чём она была. - клиент делал огромное количество запросов к серверу - сам результат запроса был крохотный и с его выдачей сервер справлялся моментально - но обработка этого результата на клиенте занимала порядочно времени - обработка эта происходила прямо в методе requestFinished... собственно, в этом и проблема, пока отрабатывал по несколько секунд в очереди один результат запроса, остальные покорно ждали, а сервер через положенное количество секунд генерил SocketTimeoutException. проблема разрешилась выносом обработки запроса из requestFinished в отдельный поток Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: ритт от Январь 18, 2008, 19:00 ай-ай-ай...прямо, как маленький :)
Название: Re: QHttp (проблема с передачай большого к-ва запросов) Отправлено: Kainit от Январь 21, 2008, 10:50 Самому стыдно. Наверное неделю тупил.
|