Russian Qt Forum
Ноябрь 23, 2024, 12:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QHttp и таймаут ответа от сервера.. где?  (Прочитано 8593 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Март 04, 2009, 13:57 »

Доброго всем здравия!

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

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

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

ArchLinux x86_64 / Win10 64 bit
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Март 04, 2009, 16:50 »

Как я понял по доке - таймаута нет. Нужно обрабатывать его руками. А таймаут по умолчанию - зависит от настройки вашей сети. На глазок около 30 секунд.

Используйте QNetworkReply - там даже сигнал таймаута есть.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Март 04, 2009, 16:56 »

т.е QHttp будет ожидать ответа в течении ~30 секунд?
Записан

ArchLinux x86_64 / Win10 64 bit
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Март 04, 2009, 18:22 »

это на глазок)
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Март 05, 2009, 08:37 »

А как тогда можно в QHttp реализовать метод прерывания коннекта (типа disconnect) при истечении определенного времени?

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

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

ArchLinux x86_64 / Win10 64 bit
BRE
Гость
« Ответ #5 : Март 05, 2009, 08:59 »

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

Код
C++ (Qt)
QTimer::singleShot( 10000, m_http, SLOT( abort() ) );
 
« Последнее редактирование: Март 05, 2009, 09:09 от BRE » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Март 05, 2009, 09:44 »

Упс, не внимателен... Спасибо Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
catprog
Гость
« Ответ #7 : Январь 18, 2010, 18:47 »

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

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

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

Кстати отсюда ответ на вопрос: QHttp ждёт установки соединения максимум 30 секунд.
« Последнее редактирование: Январь 19, 2010, 10:04 от Akaiten » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Январь 19, 2010, 10:09 »

завязывайте с QHttp - это устаревший класс. вместо него смотрите QNetworkAccessManager
Записан

Юра.
BlackTass
Гость
« Ответ #10 : Январь 19, 2010, 10:24 »

завязывайте с QHttp - это устаревший класс. вместо него смотрите QNetworkAccessManager

[offtop]
как только вы расскажете мне как для QNetworkAccessManager задать свой сокет для общения с серваком (аля setSocket() в QHttp), так сразу.
[/offtop]
Записан
catprog
Гость
« Ответ #11 : Январь 19, 2010, 15:01 »

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

завязывайте с QHttp - это устаревший класс. вместо него смотрите QNetworkAccessManager
А где в QNetworkAccessManager можно задать таймаут? На первый взгляд нету как и в QHTTP.

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

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

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


Страница сгенерирована за 0.448 секунд. Запросов: 22.