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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: создание своего кешировшика на основе QAbstractNetworkCache  (Прочитано 5711 раз)
ieroglif
Гость
« : Июнь 23, 2009, 13:36 »

в упор не понимаю как оно должно работать
по идее вначале вызывается ::metaData(QUrl) которая должна вернуть валидный QNetworkCacheMetaData
вот никак не могу понять - что же это такое? как его сформировать валидным.
и почему-то тестируя встроенный QNetworkDiskCache совсем не вижу что бы он хоть раз вернул валидный ответ.
сначала идут к нему запросы по урлам картинок - он говорит что всё не валидно и я вижу запросы в инет (проксю себе поставил для мониторинга)
страница загружается и он делает кучу своих кешированных файлов.
но больше к нему обращений нет (по функциям смотрю.. у меня в каждую qDebug засунут), а при обновлении страницы запроса в инет тоже нет - значит картинки всё же кешируются.
но на каком уровне - не понимаю.
и не понимаю как мне заставить их закешироваться на диске.

если кто поделится простым примером и каким-то чтивом (кроме оф манов - я их уже вдоль и поперёк) - буду счастлив.
Записан
ритт
Гость
« Ответ #1 : Июнь 23, 2009, 14:04 »

я ещё в QNetwork*Cache* не вникал и советом пока помочь не погу...
но всё-равно, обрисуй задачу? т.е. чего ты хочешь добиться собственным кешером?
Записан
ieroglif
Гость
« Ответ #2 : Июнь 23, 2009, 14:22 »

задача такова:
есть QWebView которая отображается хтмл генерящийся программкой.
но в этом хтмле могут юзаться элементы из интернета (картинки, анимашки, может флеш), который и будет оттуда подгружаться.
вот хочется что бы подгружался такой внешний элемент только один раз, кешировался на диске (может в последствии в базаде) и больше к инету по этому поводу обращений бы не требовалось (ну или было бы минимальным.. раз в полгода проверить обновление).

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

самым логичным мне видится кеширование через уже созданный для этого механизм - QAbstractNetworkCache.

есть другой вариант - в QNetworkAccessManager отлавливать запросы, проверять наличие сохранённого файла по этому запросу, если файла нет, то в инет, и сохраняем на будущее, а если есть, то сформировать QNetworkReply правильный и сразу его отдать.
правда тут уже тоже опасаюсь кучи подводных бочек, начиная от "правильного сформированного QNetworkReplay и продолжая уже самим манагером.. уверен что в нём тоже не всё так тупо происходит и надо эмитить кучу сигналов...

есть ещё вариант сделать свою проксю, которую повесить внутрь проги, и перенаправлять подобные запросы ей, и уж она будет всё кешировать подгружать и т.д... но это уже вообще какой-то изврат, хоть и работать будет (и навыки по написанию кеширующей прокси на Qt у меня уже в загашнике лежат).

есть ещё вариант - при формировании хтмл отсматривать в нём необходимые для кеширования элементы и подменять их пути на локальные версии.
но тут опять - проверяй "а есть ли у меня на харде?", закачивай и т.д., подменять сам хтмл - это уже как-то не хорошо, в общем...
с какой радости механизм создания хтмл должен думать о том - а есть ли оно у меня или нет?.. это не его задача.
разброс кода получается и это мне не нравится. хотя вариант тоже рабочий.

так что самым логичным мне кажется понять как работает QNetwork*Cache и написать кешировшик =)
Записан
ритт
Гость
« Ответ #3 : Июнь 23, 2009, 15:01 »

а QNetworkDiskCache (http://doc.trolltech.com/main-snapshot/qnetworkdiskcache.html) - это разве не то?
или это будет какой-то особенный кеш?

в любом случае, полагаю, нужно начать с ознакомления с сорцами QNetworkDiskCache...
Записан
ieroglif
Гость
« Ответ #4 : Июнь 23, 2009, 15:26 »

QNetworkDiskCache по докам то.
но на практике он почему-то не хочет при каждом новом запуске пользоваться кешем. опять перезакачивает.
Записан
ритт
Гость
« Ответ #5 : Июнь 23, 2009, 15:44 »

попробуй из апстрима - сравнительно недавно там что-то исправляли в подсистеме кеширования
Записан
ieroglif
Гость
« Ответ #6 : Июнь 23, 2009, 15:57 »

извиняюсь, откуда?
Записан
ритт
Гость
« Ответ #7 : Июнь 23, 2009, 17:08 »

извиняюсь, откуда?

http://qt.gitorious.org/qt/qt
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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