Russian Qt Forum

Qt => Работа с сетью => Тема начата: kuzulis от Март 04, 2009, 13:57



Название: QHttp и таймаут ответа от сервера.. где?
Отправлено: kuzulis от Март 04, 2009, 13:57
Доброго всем здравия!

А подскажите пожалуйста, имеется ли в классе QHttp нечто вроде настройки таймаута?

А то я что-то не нашел...

И сколько будет ждать по умолчанию ответа от сервера клиент построенный на QHttp?


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: Admin от Март 04, 2009, 16:50
Как я понял по доке - таймаута нет. Нужно обрабатывать его руками. А таймаут по умолчанию - зависит от настройки вашей сети. На глазок около 30 секунд.

Используйте QNetworkReply - там даже сигнал таймаута есть.


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: kuzulis от Март 04, 2009, 16:56
т.е QHttp будет ожидать ответа в течении ~30 секунд?


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: Admin от Март 04, 2009, 18:22
это на глазок)


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: kuzulis от Март 05, 2009, 08:37
А как тогда можно в QHttp реализовать метод прерывания коннекта (типа disconnect) при истечении определенного времени?

время то контролировать по таймеру можно, а вот  сам метод типа "прервать коннект" я не представляю как реализовать

ЗЫ:
т.е в Qhttp нет метода прерывания ожидания ответа (я не нашел по крайней мере)


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: BRE от Март 05, 2009, 08:59
т.е в Qhttp нет метода прерывания ожидания ответа (я не нашел по крайней мере)
QHttp::abort

Код
C++ (Qt)
QTimer::singleShot( 10000, m_http, SLOT( abort() ) );
 


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: kuzulis от Март 05, 2009, 09:44
Упс, не внимателен... Спасибо :)


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: catprog от Январь 18, 2010, 18:47
Знаю что тема старая, но у меня почти такой же вопрос, надо изменить таймаут, но не уменьшить а увеличить.
Сейчас наблюдаю картину, если страница мне не отвечает больше минуты, то идет разрыв и запуск загрузки по новой. Как сделать чтобы ответ ожидался хотябы минут 10?


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: Akaiten от Январь 19, 2010, 10:02
Знаю что тема старая, но у меня почти такой же вопрос, надо изменить таймаут, но не уменьшить а увеличить.
Сейчас наблюдаю картину, если страница мне не отвечает больше минуты, то идет разрыв и запуск загрузки по новой. Как сделать чтобы ответ ожидался хотябы минут 10?

У QHttp есть метод setSocket( QTcpSocket * socket ), у сокета есть паблик метод waitForConnected ( int msecs = 30000 ). Может быть если установить соединение с сервером в ручную через сокет, а потом задать его для QHttp, вдруг прокатит? :)

Кстати отсюда ответ на вопрос: QHttp ждёт установки соединения максимум 30 секунд.


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: lit-uriy от Январь 19, 2010, 10:09
завязывайте с QHttp - это устаревший класс. вместо него смотрите QNetworkAccessManager


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: BlackTass от Январь 19, 2010, 10:24
завязывайте с QHttp - это устаревший класс. вместо него смотрите QNetworkAccessManager

[offtop]
как только вы расскажете мне как для QNetworkAccessManager задать свой сокет для общения с серваком (аля setSocket() в QHttp), так сразу.
[/offtop]


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: catprog от Январь 19, 2010, 15:01
завязывайте с QHttp - это устаревший класс. вместо него смотрите QNetworkAccessManager
А где в QNetworkAccessManager можно задать таймаут? На первый взгляд нету как и в QHTTP.


Название: Re: QHttp и таймаут ответа от сервера.. где?
Отправлено: SABROG от Январь 20, 2010, 23:56
завязывайте с QHttp - это устаревший класс. вместо него смотрите QNetworkAccessManager
А где в QNetworkAccessManager можно задать таймаут? На первый взгляд нету как и в QHTTP.

Если внимательно изучить классы QNetworkAccessManager, то можно заметить, что QNetworkReply наследуется от QIODevice. В некоторых случаях это обычный файл, а в других это и есть сокет. Можно конечно тупо сделать приведение типов и достучаться до нужного метода, но правильней будет унаследоваться от QNetworkReply и создать свой модифицированный протокол. Пример можно найти здесь http://doc.trolltech.com/qq/32/qq32-webkit-protocols.html

С другой стороны есть и третий вариант...
Цитировать
Знаю что тема старая, но у меня почти такой же вопрос, надо изменить таймаут, но не уменьшить а увеличить.
Сейчас наблюдаю картину, если страница мне не отвечает больше минуты, то идет разрыв и запуск загрузки по новой. Как сделать чтобы ответ ожидался хотябы минут 10?

Большинство сетевых приложений может ожидать соединения достаточно долго. В этом подходе есть большой минус - во время ожидания могут происходить смены настройки сети, может появляться/пропадать интернет. Как показали мои наблюдения большинство программ так и ожидают соединения несмотря на то, что сервер уже доступен. Тот же firefox может тщетно пытаться соединиться с сайтом, а достаточно просто перезагрузить страницу вручную. Исходя из этого я предлагаю оставить таймаут как есть (или уменьшить) и сделать ограниченное количество попыток соединиться с сервером.