Баги с сетью в QT 4.5.2

Sep 25, 2009 01:55

Обнаружил странности с QNetworkAccessManager (HTTP) в QT 4.5.0 и 4.5.2 под Win32 и Linux.

В общем вот:
- Keep-Alive работает только при использовании метода POST, на GETе клиент выдает "Connection: Keep-Alive", от сервера получает тоже самое, но рвет соединение (зато finished срабатывает);
- Событие finished срабатывает только при закрытии TCP соединения. Соответственно если хотим получать finished на POSTе надо выставлять руками заголовок "Connection: close", либо событие придет только по таймауту (15 секунд для апача);
- При взаимодействии с Web-сервером на локальной машине POST периодически зависает из-за того, что клиент выдает заголовки, но не хочет отправлять тело. В результате сервер ждет тело, а клиент ждет ответа - оба ждут, все висит пока не сработает таймаут (5 минут для апача). При этом с удаленным сервером все нормально.

В общем надо использовать GET и все будет хорошо, в противном случае возможны сюрпризы.

Сеть у них построена на мультиплексинге ввода/вывода, это круто - много параллельных HTTP запросов в основном потоке, но полагаю, глюки именно из за косяков в их стейт-машине.

Вообще QT одни танцы с бубнами, никто ничего толком не знает... проблемы решаются перестановкой строчек местами методом перебора (пока не будет достигнут нужный результат).

Если закрыть на это глаза, то в принципе программировать просто и удобно (хотя QT сильно расхолаживает, программы получаются не оптимальными - надо думать что делаешь, красота кода может плохо сказаться на производительности).

Очень нравится комплект разработчика - дают среду разработки, отладчик и компилятор MinGW под Windows, Linux и Mac.
И все это абсолютно бесплатно. Еще бы багов поменьше :)

программирование

Previous post Next post
Up