Название: создание своего кешировшика на основе QAbstractNetworkCache Отправлено: ieroglif от Июня 23, 2009, 13:36 в упор не понимаю как оно должно работать
по идее вначале вызывается ::metaData(QUrl) которая должна вернуть валидный QNetworkCacheMetaData вот никак не могу понять - что же это такое? как его сформировать валидным. и почему-то тестируя встроенный QNetworkDiskCache совсем не вижу что бы он хоть раз вернул валидный ответ. сначала идут к нему запросы по урлам картинок - он говорит что всё не валидно и я вижу запросы в инет (проксю себе поставил для мониторинга) страница загружается и он делает кучу своих кешированных файлов. но больше к нему обращений нет (по функциям смотрю.. у меня в каждую qDebug засунут), а при обновлении страницы запроса в инет тоже нет - значит картинки всё же кешируются. но на каком уровне - не понимаю. и не понимаю как мне заставить их закешироваться на диске. если кто поделится простым примером и каким-то чтивом (кроме оф манов - я их уже вдоль и поперёк) - буду счастлив. Название: Re: создание своего кешировшика на основе QAbstractNetworkCache Отправлено: ритт от Июня 23, 2009, 14:04 я ещё в QNetwork*Cache* не вникал и советом пока помочь не погу...
но всё-равно, обрисуй задачу? т.е. чего ты хочешь добиться собственным кешером? Название: Re: создание своего кешировшика на основе QAbstractNetworkCache Отправлено: ieroglif от Июня 23, 2009, 14:22 задача такова:
есть QWebView которая отображается хтмл генерящийся программкой. но в этом хтмле могут юзаться элементы из интернета (картинки, анимашки, может флеш), который и будет оттуда подгружаться. вот хочется что бы подгружался такой внешний элемент только один раз, кешировался на диске (может в последствии в базаде) и больше к инету по этому поводу обращений бы не требовалось (ну или было бы минимальным.. раз в полгода проверить обновление). причины - да любые.. начать хотя бы с того что у меня сейчас жопорез и экономия канала и трафика будет для меня большим плюсом. (ради которого, вообще то, всё и затевается) самым логичным мне видится кеширование через уже созданный для этого механизм - QAbstractNetworkCache. есть другой вариант - в QNetworkAccessManager отлавливать запросы, проверять наличие сохранённого файла по этому запросу, если файла нет, то в инет, и сохраняем на будущее, а если есть, то сформировать QNetworkReply правильный и сразу его отдать. правда тут уже тоже опасаюсь кучи подводных бочек, начиная от "правильного сформированного QNetworkReplay и продолжая уже самим манагером.. уверен что в нём тоже не всё так тупо происходит и надо эмитить кучу сигналов... есть ещё вариант сделать свою проксю, которую повесить внутрь проги, и перенаправлять подобные запросы ей, и уж она будет всё кешировать подгружать и т.д... но это уже вообще какой-то изврат, хоть и работать будет (и навыки по написанию кеширующей прокси на Qt у меня уже в загашнике лежат). есть ещё вариант - при формировании хтмл отсматривать в нём необходимые для кеширования элементы и подменять их пути на локальные версии. но тут опять - проверяй "а есть ли у меня на харде?", закачивай и т.д., подменять сам хтмл - это уже как-то не хорошо, в общем... с какой радости механизм создания хтмл должен думать о том - а есть ли оно у меня или нет?.. это не его задача. разброс кода получается и это мне не нравится. хотя вариант тоже рабочий. так что самым логичным мне кажется понять как работает QNetwork*Cache и написать кешировшик =) Название: Re: создание своего кешировшика на основе QAbstractNetworkCache Отправлено: ритт от Июня 23, 2009, 15:01 а QNetworkDiskCache (http://doc.trolltech.com/main-snapshot/qnetworkdiskcache.html) - это разве не то?
или это будет какой-то особенный кеш? в любом случае, полагаю, нужно начать с ознакомления с сорцами QNetworkDiskCache... Название: Re: создание своего кешировшика на основе QAbstractNetworkCache Отправлено: ieroglif от Июня 23, 2009, 15:26 QNetworkDiskCache по докам то.
но на практике он почему-то не хочет при каждом новом запуске пользоваться кешем. опять перезакачивает. Название: Re: создание своего кешировшика на основе QAbstractNetworkCache Отправлено: ритт от Июня 23, 2009, 15:44 попробуй из апстрима - сравнительно недавно там что-то исправляли в подсистеме кеширования
Название: Re: создание своего кешировшика на основе QAbstractNetworkCache Отправлено: ieroglif от Июня 23, 2009, 15:57 извиняюсь, откуда?
Название: Re: создание своего кешировшика на основе QAbstractNetworkCache Отправлено: ритт от Июня 23, 2009, 17:08 |