Название: GE.lua - расширение HC для кэширование Google Earth Отправлено: Parasite от 15 июня 2009, 18:45:42 Приветствую, господа.
Пару дней активно работаю через связку GE + (HC + GE.lua). Хотелось бы вынести на публику некоторые замечания и предложения, и по возможности воплотить их в жизнь. Итак, начну в порядке убывания значимости: 1) Периодически HC+GE.lua (далее - связка) отдает неверные, некорректно собранные "сборные" тайлы. Выражается это в каше в заголовке собранного тайла, и клиенту GE от такого тайла сносит башню (начиная от общего замедления последующих запросов в сеть - через замедление работы - вплоть до зависания клиента). Периодичность отдачи сбойной сборки не выявлена - связка может работать полчаса без глюка, а может подвесить клиента буквально на первой минуте работы. Точно так же вероятность глюка не зависит ни от типа тайла, ни от просматриваемой области, ни от зума....закономерность не выявлена. :( 2) Не знаю, связано ли это с п.1 - но периодически в логах появляется строчка, подобная приложенной в аттаче. После этого, как правило, клиента начинает глючить (но не всегда). 3) Хотелось бы вменяемой и НАСТРАИВАЕМОЙ возможности сортировки кэшируемого контента по папкам. Общеупотребимый формат кэша могу написать сюда. 4) Хотелось бы поддержки связкой ВСЕХ серверов GE (Земля, Небо, История итд). Очень прошу разработчиков обратить внимание хотя бы на п.1. Готов ответить на возможные доп.вопросы\быть бетатестером. Благодарю. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 15 июня 2009, 19:15:13 Цитировать Периодичность отдачи сбойной сборки не выявлена - связка может работать полчаса без глюка, а может подвесить клиента буквально на первой минуте работы. Точно так же вероятность глюка не зависит ни от типа тайла, ни от просматриваемой области, ни от зума....закономерность не выявлена. Попробую докопаться. Вот только б воспроизвести у себя такую ситуацию...Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 15 июня 2009, 19:28:51 Цитировать Периодичность отдачи сбойной сборки не выявлена - связка может работать полчаса без глюка, а может подвесить клиента буквально на первой минуте работы. Точно так же вероятность глюка не зависит ни от типа тайла, ни от просматриваемой области, ни от зума....закономерность не выявлена. Попробую докопаться. Вот только б воспроизвести у себя такую ситуацию...Судя по всему, ситуация имеет место быть при сборных тайлах "всегда из кэша". При пользовании связки с чистым (стертым) кэшем - тайлы берутся из Интернета, и сбойных вроде как не наблюдается. А вот когда все части для сборного тайла есть в кэше - ... :( Ситуация имеет место быть в 90% случаев при юзании ГЕ на протяжении 10-15 минут. Потом практически нереально дождаться от клиента прогрузки других областей - у него уже "сорвана крыша" и он тормозит даже невзирая на наличие или отсутствие тайлов в кэше (просто не отправляет запросы на тайлы, несмотря на то что на экране ничего не прогружено). Помогает перезапуск клиента, очистка кэша (ГЕ и HC) и запуск клиента по новой. Все летает, пока кэш в HC снова не заполнится и тайлы не начнут собираться "только из кэша HC". :( Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 15 июня 2009, 19:38:35 У меня воспроизводится ситуация в 100% случаях.
- удаляем кэш гуглу, и HC заодно - запускаем гугл и даём прогрузить Землю, ничё не трогаем - загрузка идёт как по маслу - опять удаляем кэш гуглу (теперь всё что загружал гугл у нас в кэше HC) - запускаем гугл - подвисон на первом же запросе из кэша! Анализирую, почему гугл висит. Смотрю снифером, что за тайл пришёл гуглу. И вижу, что собранный тайл из кэша, собран не по правилам... и гугл его отбраковывает. Конкретно - не правильно указано смещение в заголовке тела ответа, либо просто мусор вместо смещения, либо смещение в "нитуда" Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 15 июня 2009, 19:42:26 А вот еще один "кривой URL".
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 15 июня 2009, 19:59:37 У меня ребенок юзает много дней (для него писалось) - и такого нет. Давайте чтоб уже говорить об одной и той же сборке вооружимся последней (в аттаче). В ней, похоже, эта же проблема присутствует. Буду пытаться воспроизвести...
Цитировать У меня воспроизводится ситуация в 100% случаях. 15 раз подряд сделал - не висит.- удаляем кэш гуглу, и HC заодно - запускаем гугл и даём прогрузить Землю, ничё не трогаем - загрузка идёт как по маслу - опять удаляем кэш гуглу (теперь всё что загружал гугл у нас в кэше HC) - запускаем гугл - подвисон на первом же запросе из кэша! Посмотрите, кто может, есть ли эти же проблемы с моим списком Преобразования URL. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 15 июня 2009, 20:06:51 У меня ребенок юзает много дней (для него писалось) - и такого нет. Давайте чтоб уже говорить об одной и той же сборке вооружимся последней (в аттаче). В ней, похоже, эта же проблема присутствует. Буду пытаться воспроизвести... Сделал 2 раза. На 2м проходе 2го раза - клиенту сорвало крышу.15 раз подряд сделал - не висит. GE 5.0.11733, HC .180 (и в ее составе - GE.lua). Винда ХП СП3. :( С новым вариантом из аттача - попробую, спасибо. Посмотрите, кто может, есть ли эти же проблемы с моим списком Преобразования URL. У меня другие замены (для раскладки тайлов по папкам, пока этого не научился делать сам скрипт). Вот часть касательно ГЕ: Код: False#~#----- Сортировка тайлов GoogleEarth -------#~##~#False#~#False#~#0 Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 15 июня 2009, 20:14:09 Цитировать удаляем кэш гуглу Какими действиями вы это делаете?Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 15 июня 2009, 20:19:51 У меня портабл сборка гугла - кэш и все настройки рядом в папочке, вот её и удаляю.
Преобразования URL и вообще ВСЕ правила отключены. Включено только одно расширение - GE. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 15 июня 2009, 20:28:42 А всплывают окошки от НС в правом нижнем углу экрана?
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 15 июня 2009, 20:34:05 Неа, никаких окошек не наблюдал ни разу
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 15 июня 2009, 20:46:00 Неа, никаких окошек не наблюдал ни разу +1Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 15 июня 2009, 20:46:11 Появилась одна идея. Выложил другую сборку.
Предварительно удалить кэши НС (дисковый и RAM) и GE. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 15 июня 2009, 20:51:34 Нет, всё так же...
Скрипт неверно формирует заголовок. Вот конкретный пример. Все тайлы в кэше HC, это первый запрос (тайловый), который выдаёт гугл при пустом кэше: http://kh.google.com/flatfile?q2-0202-q.203+q2-0300-q.203+q2-0132-q.203+q2-0031-q.203&v=1 Вот начало этого запроса: Код: Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 01 - ID склееного запроса - ОК 04 - число склееных тайлов - ОК 12 00 00 00 - смещение первого тайла (00000012) - ОК 2С 10 00 00 - смещение 2-го тайла (0000102С) - ERROR т.к. верное смещение 2-го тайла - 4С 10 00 00 (0000104С) 2С 16 00 00 - смещение 3-го тайла (0000162С) - ERROR т.к. верное смещение 3-го тайла - 55 16 00 00 (00001655) CD 1C 00 00 - смещение 4-го тайла (00001CСD) - ERROR т.к. верное смещение 4-го тайла - 00 1D 00 00 (00001D00) В аттаче тайл + исходные кусочки. Ещё интересное: размер склееного файла 8144, хотя написано, что Content-Length:8089 Дальше - больше. Вручную разрезал этот склееный тайл на кусочки, сравниваю с оригинальными - тайлы не совпадают! Мало того, так у них и размер разный оказывается... так что бьются именно тайлы! Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 15 июня 2009, 21:07:39 Появилась одна идея. Выложил другую сборку. Есть мысль о том, что глючит не сам скрипт как таковой, а механизм его взаимодействия с HC (и контент бьется не на стадии собирания его скриптом, а на стадии его передачи в HC, либо от HC в GE). Но не уверен.Предварительно удалить кэши НС (дисковый и RAM) и GE. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 15 июня 2009, 21:34:27 zed
Посмотри, плиз, длины файлов из этого запроса в кэше НС. Какие должны быть смещения согласно этим длинам? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 15 июня 2009, 21:43:23 zed Да, в точку. Смещения должны быть такие, как вбито в заголовок. Но при склеивании тайлы почему-то "выростают" и начало следующего не совпадает со значением из заголовка...Посмотри, плиз, длины файлов из этого запроса в кэше НС. Какие должны быть смещения согласно этим длинам? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 15 июня 2009, 23:19:32 Проверил у себя эти же тайлы. Все ОК. Каким способом ты получил файл в кэше q2-0202-q.203+q2-0300-q.203+q2-0132-q.203+q2-0031-q.203&v=1 ?
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 15 июня 2009, 23:38:04 Каким способом ты получил файл в кэше q2-0202-q.203+q2-0300-q.203+q2-0132-q.203+q2-0031-q.203&v=1 ? перехватил снифером (IE HTTP Analyzer) передачу между HC и GE... Выходит, скрипт (или HC+скрипт) работают не на всяком железе, и вот, у меня, не хочет работать :( Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 15 июня 2009, 23:50:46 Несоответствие между простой суммой отдельных тайлов из приаттаченного тобой архива и зафиксированным в сниффере склеенным вариантом в том, что:
- все символы с кодом 0 отдельных тайлов заменены на пробелы в склеенном - каждый символ <CR> заменен на <CRLF> - каждый символ <LF> заменен на <CRLF> Кто это делает, не могу понять. В скрипте я такого не делаю. Разница в длине, соответственно, равна общему количеству <CR> и <LF>. Может, есть еще посредник между HC и GE? Или HTTP Analyzer так может быть настроен? Или может, еще один скрипт в НС работает? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 16 июня 2009, 00:01:40 zed
В IE HTTP Analyzer есть текстовое и hex-представление данных. Если ты брал файл из текстового представления, IE HTTP Analyzer вполне мог сделать упомянутое преобразование. Да и в hex-представлении я сталкивался с тем, что он может по мелкому приврать. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 16 июня 2009, 00:52:22 Хм, действительно. Отключил скрипт, дал HC загрузить тот URL, соответственно, получил этот тайл в кэше и в снифере. Cравниваю: в кэше тайл - ОК, в снифере (в hex-представлении) - битый. Значит в топку этот снифер, чёт он чудит.
НО вопрос остаётся ребром - почему гугл стопорит? Вот 2 лога. Первый: кэши и у GE и у HC пусты - загрузка идёт без проблем. Второй: кэш пуст только у GE - ступор после первого же тайлового запроса, тут это отлично видно - 30 сек ожидание неизвестно чего... Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 16 июня 2009, 01:05:35 Несовсем ясно по логу 2, как HC грузил dbRoot 62 сек, а в это же время зависящий от него GE загрузил этот файл за 0,6 сек...
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 16 июня 2009, 07:25:35 НО вопрос остаётся ребром - почему гугл стопорит? Подтверждаю проблему и с версией ГЕ 4.2 (до этого тестировалась 5я). Стабильное стопорение и ожидание неизвестно чего после первого же запроса склееных тайлов и ответа HC/GE.lua на него (http://kh.google.com/flatfile?q2-0311-q.203+q2-0310-q.203+q2-0312-q.203+q2-0022-q.203&v=1)Вот 2 лога. Первый: кэши и у GE и у HC пусты - загрузка идёт без проблем. Второй: кэш пуст только у GE - ступор после первого же тайлового запроса, тут это отлично видно - 30 сек ожидание неизвестно чего... Более того, четверка не так бронебойна как 5ка - и просто банально крэшится, тогда как 5ка еще пыталась шевелиться. И еще более того - сегодня кучу времени не мог залогиниться в ГЕ через связку, лог в аттаче. Без HС+GE.lua - все работало прекрасно. Это, наверное, уже к разработчику HC - вот эти вот вылазящие GET в собственно урле, в них всё зло в данном случае... :( Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 16 июня 2009, 08:03:07 Версия НС последняя (180)?
Если да, кинь, плиз, мне на мыло (указано в заголовке расширения GE.lua) в заархивированном виде всю свою папку с НС (кроме подпапки кэша и подпапки Logs). Попытаюсь воспроизвести. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 16 июня 2009, 08:33:45 Версия НС последняя (180)? Да.Если да, кинь, плиз, мне на мыло (указано в заголовке расширения GE.lua) в заархивированном виде всю свою папку с НС (кроме подпапки кэша и подпапки Logs). Попытаюсь воспроизвести. Нет нужды. Версия - .180 с этого сайта, список своих замен я вчера сюда постил, а скрипт Вы сами приаттачивали. Больше расхождений со стандартной поставкой HC нет. Судя по всему, я нашел проблему глюков и замедления GE. Ведется тестирование, если все ОК на протяжении пары часов - запощу решение сюда. На наст.момент 5ка - работает и весьма шустро, 4ка - тоже, и перестала вылетать. Трабл был в скрипте. Ведется плотное тестирование. Периодические появления GET в урлах - остались. Имхо, баг HC. :( PS: интересующихся приглашаю посетить свою тему "GoogleEarth .LOCAL" - клиент ГЕ с возможностью работы в полностью локальном режиме (отломан процесс авторизации на сервере ГЕ): http://sasgis.ru/forum/viewtopic.php?f=3&t=281 Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 16 июня 2009, 11:19:31 Да, всё работает - проверено на версии 4.2 и 5.0
Модифицированный скрипт (v.0.05sr1) - ниже, кой и предлагаю сделать базовым при внесении последующих изменений: Код: --[[ <HCExtension> 1. В хидеры добавлен вывод "Connection: Close" - старые и общеизвестные грабли ГЕ, но часто не учитываемые при работе и доставляющие проблем клиенту. 2. Несколько прилизаны выводимые в лог HC мессиджи (для красоты и информативности) Не решено: 1. Периодическое появление слова GET в строке урла. Закономерности появления не выявлено. См.аттачи в предыдущих мессагах. 2. Пункты 2 и ниже из моего первого поста. Просьба попробовавшим скрипт - отписаться, всё ли ОК с клиентом. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 16 июня 2009, 14:57:35 Новая напасть - не отдает кэшированные ОДИНОЧНЫЕ тайлы клиенту ГЕ.
Тайлы точно и однозначно есть в кэше. Собирает и отдает из них тоже ОК. Но: при запросе одиночного файла клиентом ГЕ - HC+скрипт перекачивают оный. А при запросе его же, но через браузер (заруленный на HC) - этот файл свободно отдается из кэша. Аттач. Первая строчка (q2-0-q.203) - запрос браузером, отдача из кэша HC, все прекрасно. Строчка, выделенная синим - запрос клиента GE в тот же файл, но идет скачка (и обновление в кэше) этого файла. То же самое и со всеми одиночными файлами (включая дбрут) - они не отдаются из кэша в клиент ГЕ, но отдаются в браузер. Составные прекрасно отдаются из кэша и туда и туда. Хрень какая-то... :( Господа, подскажите - куда рыть? Скрипт - весь есть в предыдущем посте. :help: Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 16 июня 2009, 15:55:10 Попробуй включить опцию Настройки/Кэш/Управление/Чтение из кэша/Игнорировать no-cache.
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 16 июня 2009, 16:22:39 Попробуй включить опцию Настройки/Кэш/Управление/Чтение из кэша/Игнорировать no-cache. Заработало. Спасибо. :) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 17 июня 2009, 07:17:07 Ау, народ?? Куда все делись?
Остальные-то пунктики вопроса прорабатывать будем, или как? :) На данный момент очень интересует - что делать с периодически вылазящими GET в строке урла. Если это уже к разработчику HC (ибо в скрипте никаких GET для вывода не имеется, и лезть оно может либо с клиента ГЕ либо с самого HC), и нужно открыть новую тему с багрепортом - то намекните, сделаю. Также интересуют оставшиеся пунктики из первого поста данной темы. Спасибо. Название: Это баг или фича? Отправлено: Parasite от 17 июня 2009, 10:58:55 Приветствую.
Периодически в мониторе HC присутсвуют непонятные, битые УРЛы со вклинившейся в них командой GET. Такой УРЛ, разумеется, не скачивается - и дает ошибку. Пример - в аттаче, и собственно лог этой ситуации тоже. Проявляется примерно раз в 5-10 минут, закономерность появления не выявлена. Подскажите пожалуйста - как побороть? Очень мешает жить. Благодарю. HC.180, Windows XP, 512 RAM. Код: 17.06.09 12:26:47,354 # 2031 <<< URL: http://kh.google.com/geauth Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 17 июня 2009, 11:53:29 Цитировать На данный момент очень интересует - что делать с периодически вылазящими GET в строке урла. Нужно разбираться. Я рассчитываю, что с этим поможет Михаил. Раз он не появляется, значит у него пока нет возможности этим заняться (он никогда не бросает начатое).Цитировать Хотелось бы вменяемой и НАСТРАИВАЕМОЙ возможности сортировки кэшируемого контента по папкам. Общеупотребимый формат кэша могу написать сюда. Не знаю, что конкретно нужно. Может быть будет достаточно возможностей списка Преобразование URL. Если нет, планирую в следующей версии сделать возможность преобразования URL в имя файла в кэше в расширении.Цитировать Хотелось бы поддержки связкой ВСЕХ серверов GE (Земля, Небо, История итд). Не знаю, что это такое.Название: Re: Это баг или фича? Отправлено: mai62 от 17 июня 2009, 11:58:55 Сделайте вывод в лог заголовков, формируемых расширением GE, и посмотрите правильные ли они.
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 17 июня 2009, 12:14:07 ибо в скрипте никаких GET для вывода не имеется В скрипте хватает мест, где можно испортить заголовок запроса. Хотя бы здесь: Код: -- формируем новый URL, куда войдут только отсутствующие в кэше части Название: Re: Это баг или фича? Отправлено: Parasite от 17 июня 2009, 13:00:42 >Ищите ошибку в расширении GE.lua. Кривые заголовки появляются после его работы.
Хорошо, сегодня попробую погонять то же самое, но с отключенным ge.lua. Если проблема повторится - отпишусь тут, если нет - продолжу в теме дополнений. >Сделайте вывод в лог заголовков, формируемых расширением GE, и посмотрите правильные ли они. Где\как это настраивается\делается? HC пользуюсь недавно, еще не всё освоил... Спасибо. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 17 июня 2009, 13:12:30 >Нужно разбираться. Я рассчитываю, что с этим поможет Михаил. Раз он не появляется,
значит у него пока нет возможности этим заняться (он никогда не бросает начатое). Понял, ждемс. Но уж больно не терпится... :) >Не знаю, что конкретно нужно. Может быть будет достаточно возможностей списка Преобразование URL. Если нет, планирую в следующей версии сделать возможность преобразования URL в имя файла в кэше в расширении. Не хватает поддержки параметров, которые нужно ВЫЧИСЛЯТЬ (например, на больших зумах в ГЕ могут быть миллионы тайлов, и чтобы избежать переполнения директорий - они раскидываются по дереву "подпапок" в каждом зуме, где номер подпапки вычисляется по известному алгоритму - имя файла переводится в X\Y квадрата на карте данного зума, в зависимости от X\Y - раскладывается в ту или иную подпапку). Нужно это для создания изначально правильной структуры кэша, с коим напрямую взаимодействуют уже другие программы и проекты. На наст.момент нужное делается сторонним перловым скриптиком с рекурсивным обходом уже наработанного в HC кэша - но согласитесь, перелопачивать сторонним скриптом сотни мегабайт уже наработанного не есть правильно идеологически, да и времени отнимает немало. Вот и хотелось бы сразу делать нужное - а с экзотикой в виде LUA я, к сожалению, практически незнаком. Изучение займет ненулевое время, а задача тем временем будет стоять. :( Также не хватает байтовых\битовых операций (взять из закэшированного файла Х байт(ы) по смещению Y, кои дальше использовать в расчетах, указанных выше). Например, тот же dbRoot.v5 имеет постоянно обновляемые версии, номер которой зашит в самом файле (при этом сам файл по длине может не меняться, но изменится по содержанию). В скрипте все вышеуказанное решается на ура парой строчек (например в перловом). Про LUA - не знаю. >Не знаю, что это такое. Михаил знает. :) >В скрипте хватает мест, где можно испортить заголовок запроса. Хотя бы здесь: К сожалению, мне это практически ни о чем не говорит - я не программер, в общем и целом, да еще и на LUA... :( Ввиду чего ветка и была поднята. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 17 июня 2009, 13:38:00 Цитировать Не хватает поддержки параметров, которые нужно ВЫЧИСЛЯТЬ... Раз нужно вычислять, с помощью списка Преобразование URL это не сделаешь. Придется подождать следующей версии. И не надо бояться lua (чуть не написал человека с ружьем). Синтаксис у него очень простой, много времени на ознакомление не уйдет, особенно если есть какой-то опыт в других языках. Все действия, что ты упомянул, можно делать и даже почти все уже делаются в расширении GE. Ну а если по каким-то причинам не получится, опиши алгоритм.Название: Re: Это баг или фича? Отправлено: DenZzz от 17 июня 2009, 13:46:29 Хорошо, сегодня попробую погонять то же самое, но с отключенным ge.lua. Если проблема повторится - отпишусь тут, если нет - продолжу в теме дополнений. Поскольку на GET в мониторе жалуются только пользователи GE, то проблема либо в расширении, либо в самом Google Earth. Темы объединяю. Цитировать >Сделайте вывод в лог заголовков, формируемых расширением GE, и посмотрите правильные ли они. Где\как это настраивается\делается? HC пользуюсь недавно, еще не всё освоил... В GE.lua ниже строк, правящих hc.request_header, вставь строку: hc.put_to_log('=====Заголовок из GE:=====\r\n', hc.request_header, '=====Конец заголовка из GE:=====') Можно даже для отладки вставить такую строку в двух местах: до изменения заголовка и после, тогда будет видно, портит его расширение или же такой заголовок приходит от Google Earth. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 17 июня 2009, 14:13:03 >Поскольку на GET в мониторе жалуются только пользователи GE, то проблема
>либо в расширении, либо в самом Google Earth. На версии HC.103 такого ни разу не наблюдалось. ГЕ были те же, а вот ge.lua в той версии не было вообще. Так что либо в новой HC что-то отвалилось, либо действительно - скрипт. ГЕ исключается. :( Сегодня буду тестить согласно вышеуказанного. Отпишусь. Спасибо. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 17 июня 2009, 23:35:02 Цитировать В хидеры добавлен вывод "Connection: Close" - старые и общеизвестные грабли ГЕ У меня, к примеру, все работает без Connection: close. Поясни, плиз, в чем заключаются "общеизвестные грабли".Цитировать кинь, плиз, мне на мыло (указано в заголовке расширения GE.lua) в заархивированном виде всю свою папку с НС (кроме подпапки кэша и подпапки Logs). Попытаюсь воспроизвести. С таким ответом трудно что-то поправить... С моими настройками НС проблем нет.Цитировать Нет нужды. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 18 июня 2009, 07:49:11 Цитировать В хидеры добавлен вывод "Connection: Close" - старые и общеизвестные грабли ГЕ У меня, к примеру, все работает без Connection: close. Поясни, плиз, в чем заключаются "общеизвестные грабли".С таким ответом трудно что-то поправить... С моими настройками НС проблем нет. Хм. А как минимум в этой теме присутствуют двое юзеров с одинаковой проблемой для обоих, а всё запрошенное от одного юзера - было уже дано им же много ранее. :) Ждем результатов пробования подредактированного скрипта вторым юзером, если всё ОК - то и чох яхши.Проблема же с вылазящим GET - остается. Сейчас буду тестить согласно ранеепосоветованного. Отпишусь. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 18 июня 2009, 08:56:30 >Можно даже для отладки вставить такую строку в двух местах: до изменения заголовка и после,
>тогда будет видно, портит его расширение или же такой заголовок приходит от Google Earth. Докладаюсь. Сделал так: Код: -- и исправляем соответственно заголовок запроса к серверу дождался глюка с GET (аттач 1)...... ...и вот лог: Код: 18.06.09 11:19:50,792 # 104: Connection from local/127.0.0.1:1734 to HC Version 1.00 RC2 (1.0.0.180) UNSTABLE PS: запрашиваемого файла в кэше нет, если что - аттач 2. Куда дальше рыть? :( Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 18 июня 2009, 09:29:29 Parasite
Без отладочной информации не ясно, в какой момент происходит сбой. Включи отладочную информацию, как сказано здесь: http://handycache.ru/component/option,com_smf/Itemid,10/topic,948.msg7802/#msg7802 Логи прикладывай к посту в архиве, а не в текст поста. И добавь в скрипт еще пару строк сразу после function request(): hc.put_to_log('=== Заголовок на входе GE: ===\r\n', hc.request_header, '=== Конец заголовка ===') hc.put_to_log('=== URL на входе GE: ', hc.url) Ничего в этих строках не правь! Тем, что ты сделал выше: hc.put_to_log('Заголовок из GE:', hc.request_header, '.') пользоваться неудобно, строки слипаются и теряются в логе! Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 18 июня 2009, 11:26:50 Parasite
И положи в архив свой GE.lua, а то мы не знаем к каком он сейчас виде. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 18 июня 2009, 12:22:26 добавь в скрипт еще пару строк сразу после function request(): Дак множественные ==== - приводят к еррорам при загрузке скрипта в HC. Пробовал еще с предыдущего раза. На пустом месте не стал бы править просто так, зачем оно мне.....hc.put_to_log('=== Заголовок на входе GE: ===\r\n\', hc.request_header, '=== Конец заголовка ===') hc.put_to_log('=== URL на входе GE: ', hc.url) Ничего в этих строках не правь! Тем, что ты сделал выше: hc.put_to_log('Заголовок из GE:', hc.request_header, '.') пользоваться неудобно, строки слипаются и теряются в логе! Поудалял === - ерроры пропали, начало грузиться. Без этих знаков можно как-нибудь обойтись? Вот скрипт в аттаче (какой он был на момент написания предыдущего поста - вышеуказанное пока еще не вносил). Отладку - включу, новый лог - сделаю. Отпишусь. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 18 июня 2009, 13:55:03 Цитировать hc.put_to_log('=== Заголовок на входе GE: ===\r\n\ ', hc.request_header, '=== Конец заголовка ===') У тебя зачем там слэш после n? Он и съедает апостроф.Добавлено: 18 Июня 2009, 13:51:08 Поставил сейчас GE 5 версию. Поюзал расширение в том виде как его Михаил выкладывал. Чистил кэш GE, так что много файлов шло из кэша НС. Никаких проблем не заметил. Подвисаний нет, плохих URL в мониторе тоже нет. Может мало юзал? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 18 июня 2009, 13:55:11 Отладку - включу, новый лог - сделаю. Отпишусь. Таки взял на себя смелость немного подредактировать - в вышеуказанном виде скрипт таки не лез в HC.Итог: скрин еррора в мониторе - в аттаче, полная строка в HC такова: ---------- 18.06.2009/16:35:46 local/127.0.0.1 GET http://mw2.google.com/mw-earth-vectordb/places/dynamic_places/ru/013323.kmz 0 0/0 0 0 "Client disconnected" ---------- Прилагаю сам скрипт, на каком выполнялось тестирование. Полный лог с начала работы клиента (сюда не влазит) - тут: http://narod.ru/disk/10002157000/log.rar.html (128Кб) Что делать дальше? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 18 июня 2009, 13:56:07 У тебя зачем там слэш после n? Он и съедает апостроф. Ага, это я лишний '\' после '\r\n' пропустил. Уже исправил... Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 18 июня 2009, 14:02:28 Цитировать Итог: скрин еррора в мониторе - в аттаче, полная строка в HC такова: Это не еррор. Сообщение "Client disconnected" означает, что клиент по какой-то причине отказался от закачки запрошенного URL (например, эти файлы стали не нужны из-за смены масштаба или еще чего-то). Такое происходит иногда и с браузерами, ничего плохого в этом нет. Когда ты показывал URL, начинающийся с GET, вот это был еррор.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 18 июня 2009, 14:03:26 Поставил сейчас GE 5 версию. Поюзал расширение в том виде как его Михаил выкладывал. Чистил кэш GE, так что много файлов шло из кэша НС. Никаких проблем не заметил. Подвисаний нет, плохих URL в мониторе тоже нет. Может мало юзал? На пятерке у меня заметные подвисания и подтормаживания клиента начинались примерно после получаса-часа активной работы. На ночь например оставлять в виде "Меееедленно вращаем глобус для прогрузки всего участка" - было практически нереально (с утра - глобус вращается, но вот клиент запросов не отправляет и соответственно ничего не прогружено - ездим просто по размытому цветному пятну из того, что успело загрузиться ранее).На четверке - практически сразу, буквально после первых же запросов-ответов получаем затык клиента в виде остановки запросов на сервер. Через 20-30сек - пробивает, очередной запрос (один) - и опять ожидание, и так по кругу. За полчаса начальный глобус может и прогрузится..... :( Сейчас, после отдачи скриптом "Connection: Close" - все замечательно в обоих ГЕ, и вопрос только в вылазящих GET и в сортировке контента. Впрочем, GET вылазят и в изначальном михаиловом скрипте, так что это вовсе не последствия от введения "Connection: Close". :( Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 18 июня 2009, 14:07:23 На счет "Connection: Close" я согласен, он не помешает в ответе.
Добавлено: 18 Июня 2009, 14:04:59 Цитировать На пятерке у меня заметные подвисания и подтормаживания клиента начинались примерно после получаса-часа активной работы Я сейчас на работе и не могу позволить себе сжечь столько трафика.Добавлено: 18 Июня 2009, 14:05:51 Отлавливай URL, начинающийся с GET, с этим надо разобраться. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 18 июня 2009, 14:08:06 Это не еррор. Сообщение "Client disconnected" означает, что клиент по какой-то причине отказался от закачки запрошенного URL (например, эти файлы стали не нужны из-за смены масштаба или еще чего-то). Такое происходит иногда и с браузерами, ничего плохого в этом нет. Когда ты показывал URL, начинающийся с GET, вот это был еррор. Это все понятно - но вопрос в GET, влезшем в состав УРЛа. В таком виде, разумеется, он не может быть прогружен при всем желании, ибо получаем GET "GET http://mw2.google.com", чего не существует в природе (в отличие от просто GET на хост "http://mw2.google.com"). См.скриншот в мессаге выше, там видно что слово GET стало частью УРЛа (и только в одном файле).Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 18 июня 2009, 14:13:55 Согласен, это ошибка. GET я прозевал. Щас посмотрю лог.
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 18 июня 2009, 14:17:47 Добавлено: 18 Июня 2009, 14:05:51 Как конкретно мне его отловить? Он вылазит в произвольных местах, через произвольное время и на произвольных УРЛах (например, в примере выше он вылез просто на прямом УРЛе http://mw2.google.com/mw-earth-vectordb/places/dynamic_places/ru/013323.kmz, который даже и скриптом-то не должен отрабатываться по идее). [/color]Отлавливай URL, начинающийся с GET, с этим надо разобраться. Вылазит в 100% случаев за 10-15 минут активной работы, но вот закономерности не вижу. На HC.103 такого вообще ни разу не видел. ГЕ юзаю еще со времен когда он был платным KeyHole'ом (примерно 1996-97 годы, примерно тогда же использую данные с него в своих проектах) - таких УРЛов клиент сам по себе сроду не генерировал. Это либо HC либо скрипт, либо оба в связке. Третьего не дано. :( PS: единственная закономерность с GET - вроде как вылазит только на УРЛах, связанных с Гуглем. На более других УРЛах я его вроде как не видел. Хотя, возможно, это просто совпадение - ГЕ генерит УРЛы как никто другой, и несколько сотен тысяч запросов за сеанс - влегкую. Такую плотность браузером просто так не создашь, поэтому может при браузинге оно и не проявляется.......Не знаю - не уверен, врать не буду. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 18 июня 2009, 14:27:39 Согласен, это ошибка. GET я прозевал. Щас посмотрю лог. Вот в логе поступление проблемного запроса: MappedPortExecute_begin 18.06.09 16:35:45,721 # 299 MappedPortExecuteDo_begin/450 18.06.09 16:35:45,721 # 299 <<< URL: GET http://mw2.google.com/mw-earth-vectordb/places/dynamic_places/ru/013323.kmz Судя по логу, кривой запрос был еще до работы расширения! Либо такой пришел от GoogleEarth, либо HC его неправильно понял. mai62 Может, такое происходит из-за предыдущего POST-запроса в этом же соединении? Возможно, HC неправильно отпределил границы предыдущего POST-запроса и нового GET-запроса? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 18 июня 2009, 14:31:41 Цитировать Как конкретно мне его отловить? Ты его уже отловил, я просто это прозевал. В потоке откуда-то лишний перевод строки (hex OA) берется. Попробую разобраться откуда.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 18 июня 2009, 14:38:18 В потоке откуда-то лишний перевод строки (hex OA) берется. Попробую разобраться откуда. Как вариант, он остался от предыдущего POST-запроса. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 18 июня 2009, 15:06:43 Получается вот что: GE/приложение шлет POST-запрос с порцией данных и после этих данных в потоке остается лишних 2 байта (0D 0A). Вот они и мешают дальнейшей работе, GE/расширение тут не при чем.
Parasite А эта проблема проявляется с разными версиями GE или одной? Я могу сделать НС поустойчивей к таким ситуациям, но это будет в след. версии. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 18 июня 2009, 16:32:31 mai62 Кстати, да. Частенько такой GET вылазит, когда ГЕ уже все прогрузил и остановился со скачками, и простоял больше 5и минут. Следующее движение в ГЕ по карте - он тут же перезапрашивает авторизацию (тот самый POST), и частенько - но далеко не всегда - со следующим запросом вылезает GET. Может, такое происходит из-за предыдущего POST-запроса в этом же соединении? Возможно, HC неправильно отпределил границы предыдущего POST-запроса и нового GET-запроса? Это я только сейчас в уме свел по сумме наблюдений. Сорри, что не сказал ранее. А эта проблема проявляется с разными версиями GE или одной? С 4.2 и с 5 - подтверждаю. Проблема имеется. Других установленных у меня нет.Многолетние пляски со сниффером и ГЕ - НИ РАЗУ не показывали проблемных запросов на выходе ГЕ. Предлагаю ГЕ иссключить, 99.9% что проблема не в нем. В потоке откуда-то лишний перевод строки (hex OA) берется. Попробую разобраться откуда. Это может быть часть ответа сервера на POST-запрос клиента (там RAW-socket, насколько я помню). Рубить это никак нельзя. :) Я могу сделать НС поустойчивей к таким ситуациям, но это будет в след. версии. Спасибо. А когда ждать след.версии? Хотя бы приблизительно.Может, какой-нибудь SR1 (Service Release) или заплатку, пока суть да дело? Плииииииз....... Ибо действительно мешает жить. :( UPD: в личку уже пошел, спасибо. :) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 18 июня 2009, 16:37:31 Сейчас положу тебе в PM ссылку на исправленную версию, потестируй.
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 18 июня 2009, 19:41:29 Сервер Гугла отдает ответы HTTP 1.1 без Connection:close (по крайней мере, для 5-й версии), и значит, приложение GE их понимает. Если скрипт будет отдавать close, то последовательно создаст сотни соединений, хотя можно было обойтись двумя. А для GE 4-й версии какие ответы отдает сервер?
Может быть так, что именно из-за выявленной особенности POST-запроса все и происходит - соединение стопорится. А Connection: close просто не дает идти по одному соединению вслед за этим POST-запросом другим запросам. И поэтому по случайному стечению обстоятельств стало лекарством, временно устраняющим боль, но не лечащим причину. Надо погонять скрипт без Connection: close на доработанном НС. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 07:44:28 Сервер Гугла отдает ответы HTTP 1.1 без Connection:close По дефолту коннекты ГЕ имеют статус Keep-Alive, и это явно светится на сниффере. Отсутствие прямого указания есть распространенная ошибка при работе с ГЕ - его от этого глючит. Проверено лично и не раз. Вот типичный заголовок ответа сервера:Код: header('HTTP/1.1 200 OK'); , где для клиента обязательными для рассмотрения являются поля Код: header('HTTP/1.0 200 OK'); Другой вопрос, что коннекты в некоторых случаях могут закрываться принудительно - например гейтом или проксиком, и тогда скрипту заботиться об этом действительно нет нужды. Но это не мой случай. Если скрипт будет отдавать close, то последовательно создаст сотни соединений, хотя можно было обойтись двумя. Дело в том, что при работе ГЕ в штатном режиме как раз и создаются сотни соединений, а Keep-Alive нужен для ОДНОЗНАЧНОГО указания клиенту, как поступать с уже открытыми. Что же касается именно сотен - так ГЕ одновременно не открывает больше 10 соединений за раз (лично я не видел и 10и, обычно 3-5), и при этих "подвисших" 10и соединениях получаем тормоза клиента при отправке новых запросов.Да, и со стороны сервера ГЕ коннекты Keep-Alive по которым уже прошла передача данных - сбрасываются гораздо быстрее указанных 300 секунд, навскидку секунд за 20-30 - что и имело место быть при глюке, описанном в первом посте этой ветки. Клиенту ГЕ надо прямо указывать, что делать с коннектами - либо Keep-Alive на время X (и тогда оно отобьется сервером много ранее), либо Close - и тогда оно отобьется клиентом намного быстрее. А для GE 4-й версии какие ответы отдает сервер? Точно те же - сервер-то тот же.Может быть так, что именно из-за выявленной особенности POST-запроса все и происходит - соединение стопорится. А Connection: close просто не дает идти по одному соединению вслед за этим POST-запросом другим запросам. И поэтому по случайному стечению обстоятельств стало лекарством, временно устраняющим боль, но не лечащим причину. Нет. Сделайте скрипт, который запрашивает на ГЕ например /geauth, но не указывает состояния коннекта. Получите практически мгновенный контент, но вот скрипт будет ждать закрытия соединения еще секунд 20-30. При указании Close - мгновенный выход после окончания передачи контента. Проверено - у меня есть самописный аналог сервера ГЕ, написанный на Перле плюс Апач (для коего собственно контент и нарабатывается при помощи HC), выдержки из которого я и привел выше. :) С заголовками в свое время я поплясал долго и нудно.....Однозначное указание состояния коннекта является ОБЯЗАТЕЛЬНЫМ при работе с ГЕ, особенно если при работе без оных появляются глюки с медленными запросами. При быстром же коннекте (например в локалке) Close и вовсе рекомендовано лучшими собаководами нашего городка. :) Добавлено: 19 Июня 2009, 07:41:20 Сейчас положу тебе в PM ссылку на исправленную версию, потестируй. Всю ночь работали 4 ГЕ разных версий с 4х компьютеров. 8.5млн запросов в сумме.....НИ ОДНОГО вылезшего ГЕ. Браво, так держать!!! :) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 19 июня 2009, 12:33:26 Сделайте скрипт, который запрашивает на ГЕ например /geauth, но не указывает состояния коннекта. Получите практически мгновенный контент, но вот скрипт будет ждать закрытия соединения еще секунд 20-30. А ты напиши скрипт, который не ждет закрытия соединения, а посылает по нему следом второй запрос, третий и т.д. В итоге сэкономишь время на открытие новых соединений. Кроме того, раз сервер ГЕ поддерживает HTTP/1.1, то он должен и pipelining понимать, а это значит, что ты можешь скриптом заслать серверу по одному соединению конвейером группу запросов, а потом принимать последовательно на них ответы. Опять же, сэкономишь время на организацию соединений и сократишь очередь на их обработку на сервере. Однозначное указание состояния коннекта является ОБЯЗАТЕЛЬНЫМ при работе с ГЕ, особенно если при работе без оных появляются глюки с медленными запросами. Если все так плохо у ГЕ с keep-alive, почему же они до сих пор не пофиксят этот баг? Почему ГЕ-клиент не использует (по твоим утверждениям) открытое keep-alive соединение повторно (хотя в твоем логе я вижу обратное)? И почему описанную проблему испытывают не все пользователи ГЕ? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 19 июня 2009, 13:07:18 Цитировать Кроме того, раз сервер ГЕ поддерживает HTTP/1.1, то он должен и pipelining понимать Они ведь не общедоступный сервер сделали, насколько я понимаю. Они для доступа к нему сами делают своих клиентов. Поэтому вполне могут наплевать на стандарты и сделать как им нравится.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 19 июня 2009, 13:32:06 Они ведь не общедоступный сервер сделали, насколько я понимаю. Они для доступа к нему сами делают своих клиентов. Поэтому вполне могут наплевать на стандарты и сделать как им нравится. Они должны учитывать, что между их клиентом и сервером может быть куча прокси-серверов посредников, которые поддерживают все требования стандартов и могут сами сгруппировать запросы пачками и применить конвейер, т.к. сервер ГЕ назвался HTTP/1.1 сервером. Ну, бог с ним, с pipelining-ом. Речь сейчас про keep-alive. В логе выше от Parasite я насчитал 21 запрос от ГЕ-клиента по одному соединению # 56, а это означает, что keep-alive клиент ГЕ понимает и очень даже активно его использует! P.S. Где-то раньше я проводил замеры времени с использованием keep-alive и без - получалось, что из кэша HC без keep-alive страницы с множеством элементов загружаются почти в 2 раза медленнее, чем с keep-alive, поэтому менять в скрипте keep-alive на close выйдет весьма накладно... Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 19 июня 2009, 13:47:41 Цитировать Они должны учитывать, что между их клиентом и сервером может быть куча прокси-серверов посредников, которые поддерживают все требования стандартов и могут сами сгруппировать запросы пачками и применить конвейер, т.к. сервер ГЕ назвался HTTP/1.1 сервером. Должны, не должны не знаю. Они сделали причудливое объединение файлов в группы при закачке, которое исключает их кэширование стандартными прокси-серверами. Это же их не смутило. Кстати объединение нескольких запросов в один компенсирует потери от неиспользования keep-alive (если они его не используют, я не проверял).Цитировать Где-то раньше я проводил замеры времени с использованием keep-alive и без - получалось, что из кэша HC без keep-alive страницы с множеством элементов загружаются почти в 2 раза медленнее, чем с keep-alive, поэтому менять в скрипте keep-alive на close выйдет весьма накладно... У меня нет сомнений в полезности использования keep-alive. Я просто думаю, что если они так хотят, они могут его не использовать. Их ведь, богатых, не поймешь.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 19 июня 2009, 14:02:27 Кстати объединение нескольких запросов в один компенсирует потери от неиспользования keep-alive (если они его не используют, я не проверял). Посмотри в логе выше. ГЕ-клиент использует keep-alive, причем весьма активно! Если бы Parasite не вставил в скрипт принудительный close, то запросов через активные keep-alive соединения было бы еще больше! Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 19 июня 2009, 14:16:35 Цитировать ГЕ-клиент использует keep-alive, причем весьма активно! Пусть использует. Лишь бы из-за этого сбоев не возникало.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 14:30:44 А ты напиши скрипт, который не ждет закрытия соединения, а посылает по нему следом второй запрос, третий и т.д. А зачем, если всё прекрасно работает уже сейчас? :) Более того, на момент моего плотного ковыряния ГЕ сервер не позволял несколько запросов в одном соединении (проверялось), да и сейчас последняя версия ГЕ предпочитает посылать не три последовательных запроса, а ОДИН запрос на связку трех тайлов в виде ОДНОГО файла в каждом соединении, кой файл позже и разбирает (что жрет ненулевые ресурсы на обоих сторонах коннекта). Не спрашивайте меня, почему у них в заголовках именно Keep-Alive - я этого не знаю. Возможно, это фича связана с QT-based приложениями (GE - одно из них). Не знаю, врать не буду. Работает, почти не глючит - и Аллах с ним. В итоге сэкономишь время на открытие новых соединений. Открытие новых соединений в случае с локалкой - несущественно, а в случае с интернетом - собственно контент передается много дольше и разово (в случае с HC и кэшированием), так что это тоже не бутылочное горлышко. Бутылочное горлышко в случае ГЕ - это необходимость наличия валидных сессий и постоянные переавторизации в связи с этим. В случае же ГМ (GoogleMaps) - это еще и лимит на количество запросов на сервер за единицу времени, превысил - получи бан на сутки-двое-несколько. Так что широкоупотребимая хохма "Тебя что, на гугле забанили??" таки иногда имеет место быть. :( Если все так плохо у ГЕ с keep-alive, почему же они до сих пор не пофиксят этот баг? Наверное потому, что это не баг а фича. Возможно, оно таки где-то в какой-то части работы используется, либо планируется использовать, либо гуглевцам хочется видеть работу с клиентом это именно так, а не иначе. И почему описанную проблему испытывают не все пользователи ГЕ? Потому что в заголовках родного сервера ГЕ есть прямое указание насчет состояния коннекта, а в HC+GE.lua его не было.Это спор ни о чем. Предлагаю закруглиться. Подредактированный скрипт проблем на наст.время у меня лично не вызывает, в отличие от его первоначального вида, доставлявшего некоторые проблемки. Он работает, как и задумывался (спасибо автору за него!!). Если кому-то из юзеров не понравится вывод "Connection:Close" в хидеры - они вполне смогут либо обосновать это тут, либо вынести самостоятельно. Предлагаю все же оставить этот вывод в скрипте на будущее, ибо как минимум в моем лице это зело помогло уйти от траблов, и автор приобрел еще одного пользователя. Решать, конечно же - автору. Да, и в моем Перле тоже есть строки: Код: $fp = fsockopen("kh.google.com", 80, $errno, $errstr, 15); Можем ли мы перейти к обсуждению пунктика сортировки контента средствами самого скрипта? Спасибо. Где-то раньше я проводил замеры времени с использованием keep-alive и без - получалось, что из кэша HC без keep-alive страницы с множеством элементов загружаются почти в 2 раза медленнее, чем с keep-alive, поэтому менять в скрипте keep-alive на close выйдет весьма накладно... Дело не в замене Keep-Alive на Close в скрипте. Дело в том, что в ПЕРВОНАЧАЛЬНОМ скрипте вообще не было никакого указания - ни Keep-Alive, ни Close, и это и была ошибка.Попробуйте поменять в скрипте на Keep-Alive - оно должно тоже работать. Я не пробовал. Скрипт-то отдает этот параметр в сторону клиента ГЕ, а не в сторону интернет-сервера (как я понимаю), а клиент ГЕ как правило на той же машине либо, в худшем случае - в той же локалке. То есть, при скорости loopback\LAN потери таки мизерны. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 19 июня 2009, 14:34:26 Цитировать Можем ли мы перейти к обсуждению пунктика сортировки контента средствами самого скрипта? Работа над такой возможностью для НС ведется. Будет что попробовать сообщу.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 14:41:59 Цитировать Можем ли мы перейти к обсуждению пунктика сортировки контента средствами самого скрипта? Работа над такой возможностью для НС ведется. Будет что попробовать сообщу.На мой взгляд, вопрос (для HC) заключается в том, что от скриптов надо бы принимать относительные пути для сохранения в кэше относительно корня оного, если HC еще этого не умеет. А уж посчитать путь в самом скрипте и перекрыть стандартный HCшный путь - дело техники, имхо, если HC принимает подобные перекрытия от расширений. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 19 июня 2009, 15:04:03 Дело не в замене Keep-Alive на Close в скрипте. Дело в том, что в ПЕРВОНАЧАЛЬНОМ скрипте вообще не было никакого указания - ни Keep-Alive, ни Close, и это и была ошибка. Согласно RFC 2616 отсутствие заголовка "Connection:" в HTTP/1.1 приравнивается к "Connection: Keep-Alive". Неужели ГЕ-клиент об этом не знает? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 19 июня 2009, 15:09:11 Ты правильно понял. Сейчас нельзя, хочу сделать чтобы можно было. Внешне будет выглядеть примерно так как ты описал.
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 19 июня 2009, 16:16:23 Цитировать Просьба попробовавшим скрипт - отписаться, всё ли ОК с клиентом. Подтверждаю, с новым скриптом гугл перестал зависать. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 18:38:32 Согласно RFC 2616 отсутствие заголовка "Connection:" в HTTP/1.1 приравнивается к "Connection: Keep-Alive". Так то в RFC2616, а то - в коммуникации между закрытым продуктом "Google Earth" и столь же закрытым сервером "Base Thumbnail Front End". :) PS: ГЕ вообще не гуглевая разработка, причем весьма старая - ждать от нее полной поддержки HTTP1.1 (которого на момент разработки просто не было) имхо было бы несколько опрометчиво. Со своей же стороны гуглеребята, скорее всего, просто забили на это - и ведь действительно, РАБОТАЕТ. :) Могу выложить сетапчик GoogleEarth в состоянии "еще задолго до Гугля", если кому интересно. :) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 19 июня 2009, 18:40:00 Цитировать Дело в том, что в ПЕРВОНАЧАЛЬНОМ скрипте вообще не было никакого указания - ни Keep-Alive, ни Close, и это и была ошибка. Это не ошибка. Как уже отметил DenZzz - это правильное поведение в соответветствии со стандартом. Гугл об этом знает: от сервера GE ответы приходят без Connection: keep-alive.Думаю, первоначальный скрипт правилен. А все проблемы исходили только от неправильного запроса POST. Parasite, проверь это, плиз, в своих сложных условиях. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 19:01:27 Ты правильно понял. Сейчас нельзя, хочу сделать чтобы можно было. Внешне будет выглядеть примерно так как ты описал. Подождем. Спасибо.Это не ошибка. Как уже отметил DenZzz - это правильное поведение в соответветствии со стандартом. Гугл об этом знает: от сервера GE ответы приходят без Connection: keep-alive. Тем не менее, это безусловно РАБОТАЕТ у двух юзеров, у которых ранее были проблемы. Скрин с Wiresharka (с Keep-Alive) - тут: http://narod.ru/disk/10048509000/Clipboard02.gif.html Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 19 июня 2009, 19:26:57 Прилагаю аттач с WireShark'а Мы ж об ответах говорим, а тут запрос...Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 19:35:27 Мы ж об ответах говорим А как ведет себя HC (в виде сервера) при входящем Keep-Alive с клиента и наличии всех тайлов в кэше, и без последующего принудительного дропа? Контент HC отдал под запрос - ок, а дальше что? Дропать-то соединение кто будет - HC по таймауту? У гугля-то дропается сервером, и весьма быстро. :) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 19 июня 2009, 19:49:58 Дропать-то соединение кто будет - HC по таймауту? У гугля-то дропается сервером, и весьма быстро. :) HC тоже только 30 секунд ждет, как и гуглевый сервер... Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 20:03:01 HC тоже только 30 секунд ждет, как и гуглевый сервер... Это и есть ненужная задержка, лечащаяся явным указанием Connection:Close клиенту. Дело-то в том, что скрипт ИМЕННО для ГЕ, и посему должен соответствовать не теоретически правильному (но в данном случае - неработающему) стандарту, а именно практическим запросам ГЕ (даже если они нестандарты и кривы как турецкая сабля). Connection:Close - давнишние грабли в работе с ГЕ, и с этим вряд ли нужно спорить, ибо это очевидный факт для тех, кто щщупал ГЕ чуть более чем наполовину. Коллеги, предлагаю прекратить ломать копья. Скрипт ЗАРАБОТАЛ, и заработал у обоих кто сообщал о проблемах - а это главное. Кому не нравится - могут самостоятельно подредактировать обратно, а то проблема-то на полушку, да и решенная уже - а обсуждения на пятак уже накреативили. Время теряем, а работа - стоит. :) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 19 июня 2009, 20:12:02 Коллеги, предлагаю прекратить ломать копья. Не вопрос. Просто попросил проверить первоначальный скрипт в суровых условиях с новой сборкой НС, а в ответ получил лишь заверения в его ошибочности, в чем не уверен.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 19 июня 2009, 21:33:25 Цитировать Дело в том, что в ПЕРВОНАЧАЛЬНОМ скрипте вообще не было никакого указания - ни Keep-Alive, ни Close, и это и была ошибка. Это не ошибка. Как уже отметил DenZzz - это правильное поведение в соответветствии со стандартом. Гугл об этом знает: от сервера GE ответы приходят без Connection: keep-alive.Думаю, первоначальный скрипт правилен. А все проблемы исходили только от неправильного запроса POST. Parasite, проверь это, плиз, в своих сложных условиях. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 22:20:07 попросил проверить первоначальный скрипт в суровых условиях с новой сборкой НС, а в ответ До "суровых условий" еще дойти надо. Таки ж рабочий день пока ж еще. :)) Приду домой, оторву от скрипта "Connection:Close", поставлю на ночь (HC уже новый). Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 19 июня 2009, 22:41:09 Проблема, помню, была со скриптом, когда на сервере изменился файл dbRoot. В тот момент разобраться не успел. Что происходит при этом, кто-нибудь знает? Или у кого есть старый dbRoot подкиньте, плиз, сам попробую воспроизвести.
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 19 июня 2009, 23:25:52 на сервере изменился файл dbRoot. А что за проблема? В чем заключается? Дбруты есть в ассортименте, но вряд ли проблема в них - они как сущности всегда одинаковые, разный только контент в них. Хидеры и прочая - одинаковые, исключая длину файла и таймштампы. Имхо нет разницы, с каким дбрутом отлавливать глюк, если таковой есть - в собственно контент не смотрит ни HC, ни скрипт. Что происходит при этом, кто-нибудь знает? Опишите глюк, плз. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 19 июня 2009, 23:32:15 Как только изменился dbRoot, поменялись версии файлов, и скрипт начал виснуть. Заняться этим сразу не было времени. А теперь воспроизвести не чем. В принципе, можно подождать следующего обновления. Когда-нибудь оно ж произойдет...
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 20 июня 2009, 01:47:49 Цитировать Как только изменился dbRoot, поменялись версии файлов, и скрипт начал виснуть. Как только сменится dbRoot, гугл начнёт запрашивать q2 заново (с новой версией!) и ни в коем случае ему нельзя отдавать старые q2 из кэша - тогда он точно может начать виснуть и запрашивать несуществующие данные. Сейчас же, скрипт вроде не игнорирует версии файлов, а ищет в кэше файл с версией, строго соответствующий запросу? Если так, то проблем при обновлении dbRoot не будет.P.S. Если вам нужно заставить гугл выдавать запросы со старой версией (чисто для эксперементов), то в любом hex-редакторе измените 7-й байт dbRoot-а на нужный номер. Только имейте в виду, что сервер гугла устаревших данных вам не отдаст. Начал отслеживать точные даты обновлений на серверах гугла: Обновления данных на GoogleEarth (http://wiki.googis.info/Обновления_данных_на_GoogleEarth) Как видно, два дня назад (17.06.2009 17:31:08 GMT), как раз было очередное обновление... Ещё, следует обратить внимание на то, что HC может модифицировать запрос клиента и дописывать If-Modified-Since:, и если дата будет не верна (скажем, будет текущая дата), то сервер отдаст 304 Not Modified, и загрузки dbRoot-а не произойдёт, хотя он уже может обновиться на сервере. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 20 июня 2009, 09:31:04 zed
Спасибо. Похоже, dbRoot, изменясь на сервере, не изменился у меня (срабатывал список Н). И дальше Гугл, видимо, отказывался выдавать старые версии тайлов. Убрал dbRoot из списка Н. Скрипт, получается, ни при чем. Теперь надо определиться с выводимыми в мониторе сообщениями. Просьба новые предложения сначала выносить на обсуждение, а потом менять скрипт. Иначе будет неразбериха. Сейчас предложения такие: 1. При взятии целиком из кэша в мониторе помимо "200 ОК From Cache" писать: 'GE: составной, всё из кэша'. Имхо, тут будет дублирование информации. 2. При взятии частично из сети, частично из кэша вместо 'GE: из сети и кэша' писать: 'GE: составной, из сети и кэша'. Тут тоже видится избыток, т.к. раз и из сети, и из кэша, то понятно, что составной. 3. При взятии полностью из сети вместо 'GE' писать: 'GE: составной, загружен полностью'. Здесь, вроде, тот факт, что файл составной, опять же виден из URL. Что загружен полностью, показывают 100%. Не отражено, что произведена запись в кэш. Может, писать 'GE: записан в кэш'? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 20 июня 2009, 11:45:41 Приду домой, оторву от скрипта "Connection:Close", поставлю на ночь (HC уже новый). Докладаюсь: пришел, оторвал, поставил ГЕ на ночь мееедленно вращаться на глубоком зуме, выключил монитор и пошел спать.С утра ГЕ был найден скрэшившимся (аттач). Судя по логам последний запрос на ГЕ-урл был через 28 минут после начала процесса, и последние несколько десятков запросов брались именно полностью из кэша. Вернул connection:close. 4 часа, полет нормальный. Добавлено: 20 Июня 2009, 11:37:51 Теперь надо определиться с выводимыми в мониторе сообщениями. Просьба обратить внимание: при взятии ОДИНОЧНОГО (не составного) тайла из кэша - скрипт не отрабатывает ситуацию с мессагой, и выводит такую же, как и при загрузке этого тайла с интернета (тогда как HC пишет верно). Может, стоит ввести отработку этой ситуации в скрипт - сугубо для красоты всего процесса? :)Аттач. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 21 июня 2009, 10:37:16 С утра ГЕ был найден скрэшившимся Спасибо. Обнаружилось, что НС не очищает память предыдущих запросов в рамках одного соединения, и в случае обработки тысяч запросов одним соединением через определенное время возникало переполнение. В новой сборке НС это исправлено.Connection: close не давал идти в одном соединении нескольким запросам, и предотвращал такую ситуацию. Цитировать при взятии ОДИНОЧНОГО (не составного) тайла из кэша - скрипт не отрабатывает ситуацию с мессагой, и выводит такую же, как и при загрузке этого тайла с интернета (тогда как HC пишет верно). Может, стоит ввести отработку этой ситуации в скрипт - сугубо для красоты всего процесса? В случае одиночного тайла скрипт не знает, есть ли файл в кэше и будет ли он обновлен. Он просто дает НС команду обработать это все самостоятельно. Можно написать так, что скрипт будет все это узнавать, но это лишние телодвижения, влияющие на производительность. СтОит?Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 22 июня 2009, 07:19:02 Спасибо. Обнаружилось, что НС не очищает память предыдущих запросов в рамках одного соединения, и в случае обработки тысяч запросов одним соединением через определенное время возникало переполнение. В новой сборке НС это исправлено. Где взять новую сборку для тестирования?Если же Вы про .182 - то именно с ней и тестировалось, да и крэш был в ГЕ, а не в HC (HC прекрасно работает с того момента и до сих пор, даже без перезапусков) . Как показывает практика, ГЕ прекрасно умеет валиться от кривых хидеров\ответов - никакой защиты в нем на эту тему нет, и банальный 404 HTML (текстом) ушедший в клиента в ответ на запрос тайла - может прекрасно его свалить. Возможно, из-за переполнения в HC (?) оно разово отправило клиенту кривой ответ, от чего того и переклинило. Сниффером не проверял. В случае одиночного тайла скрипт не знает, есть ли файл в кэше и будет ли он обновлен. Он просто дает НС команду обработать это все самостоятельно. Можно написать так, что скрипт будет все это узнавать, но это лишние телодвижения, влияющие на производительность. СтОит? Имхо потери производительности в данном случае мизерны на фоне передачи собственно контента. В скрипт-то всё равно заходить, так что он в любом случае выполняется и время теряется...Имхо, рассмотрение потерь в данном случае - это экономия на спичках. :) PS: как проверить нагрузку на HC на десятке-другом вирт.машин? Насколько я понимаю, HC не обрабатывает более 5и пользователей одномоментно...? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 22 июня 2009, 12:31:01 Цитировать Где взять новую сборку для тестирования? Там же, где предыдущую. Обновил.Цитировать как проверить нагрузку на HC на десятке-другом вирт.машин? Не понял почему речь идет о виртуальных машинах?Добавлено: 22 Июня 2009, 12:12:02 Чтобы проверить нагрузку можно от имени одного пользователя отправлять запросы с разных машин. Для этого в списке Пользователей нужно заполнить колонки Имя и Пароль, а колонку IP оставить пустой. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 22 июня 2009, 12:48:41 Цитировать Где взять новую сборку для тестирования? Там же, где предыдущую. Обновил.Цитировать как проверить нагрузку на HC на десятке-другом вирт.машин? Не понял почему речь идет о виртуальных машинах?Чтобы проверить нагрузку можно от имени одного пользователя отправлять запросы с разных машин. Для этого в списке Пользователей нужно заполнить колонки Имя и Пароль, а колонку IP оставить пустой. В этом случае у меня получится прокси с авторизацией, так?Желательно бы открытый, как при заполнении только имени и IP. Если я заполню только имя, не указывая ни пароля ни IP, и под одним именем будут множественные подключения с разных IP (вирт.машин) - это допустимая конфигурация? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 22 июня 2009, 13:08:52 Если я заполню только имя, не указывая ни пароля ни IP, и под одним именем будут множественные подключения с разных IP (вирт.машин) - это допустимая конфигурация? В настроках доступа в IP можно использовать диапазоны и маски. Тогда хоть вся сеть под одним именем может ходить. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 22 июня 2009, 13:12:17 В настроках доступа в IP можно использовать диапазоны и маски. Тогда хоть вся сеть под одним именем может ходить. О, отлично. То что нужно.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 22 июня 2009, 16:41:56 О, отлично. То что нужно. Господа, а подскажите пожалуйста, как средствами HC сделать следующее:1. Файл. Качается, кладется в кэш. 2. С кэша запросившей стороне НЕ отдается - отдается только свежескачанное (каждый раз). В кэше лежит сугубо "для истории". 3. Каждый раз при обновлении данного файла на сервере - файл, который лежит в кэше, переименовывается по порядку, а на его место кладется обновленный. В итоге будем иметь цепочку переименованных версий одного и того же файла в кэше. Благодарю. PS: нужно для dbRoot.v5 в свете сабжа. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 22 июня 2009, 20:44:32 Версия 0.06 от 22.06.2009
+ Лог ошибок (файл GE.log). Если он появится в папке со скриптом, подскажите мне, плиз * Учитывается состояние опции НС "Разрешить чтение из кэша" * Изменен текст сообщений в колонке "Правила" монитора - Слегка улучшено использование памяти Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 22 июня 2009, 21:45:09 В случае одиночного тайла скрипт не знает, есть ли файл в кэше и будет ли он обновлен. Он просто дает НС команду обработать это все самостоятельно. Можно написать так, что скрипт будет все это узнавать, но это лишние телодвижения, влияющие на производительность. СтОит? Думаю стОит такую возможность включить в скрипт, но с возможностью закомментировать эту часть скрипта. Или наоборот: чтоб по-умолчанию было закомментировано, а тот, кому это надо, уже сам сообразит что сделать :) Кстати, а для чего в скрипте строчки: Код: -- if hc.url:find('geauth') then И почему-то опять, в скрипте, проигнорирована строчка Connection: Close? Код: hc.answer_header = 'HTTP/1.1 200 OK From Cache (HC)\r\nServer: HandyCache\r\nContent-Length: ' .. #hc.answer_body .. '\r\n\r\n' И ещё заметил, одиночный файл (q2-0-q.204) есть в кэше, но HC его всё равно загружает из инета, а скрипт при этом пишет, что "GE-из кэша" Цитировать 22.06.2009/21:01:39 local/127.0.0.1 http://kh.google.com/flatfile?q2-0-q.204 119 119/209 100% 489 "200 OK" GE-из кэша, З.1 И такое со всеми одиночными тайлами, которые есть в кэше...GE-из кэша З.1 (Запись в кэш): .* Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 22 июня 2009, 22:38:55 Цитировать Попытка закэшировать авторизацию? Да. Это все закомментировано.Цитировать И ещё заметил, одиночный файл (q2-0-q.204) есть в кэше, но HC его всё равно загружает из инета, а скрипт при этом пишет, что "GE-из кэша" Предположу, что в НС отключено Настройки/Кэш/Управление/Игнорировать no-cache. Если так, то надо включить. Из скрипта я этим параметром управлять не могу.Цитировать Уже ж вроде всё обсудили и обошли эти грабли? Граблей нет. Если клинит, давай посмотрим подробней...Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 22 июня 2009, 22:48:30 Цитировать Цитировать Попытка закэшировать авторизацию? Да. Это все закомментировано.Цитировать Цитировать И ещё заметил, одиночный файл (q2-0-q.204) есть в кэше, но HC его всё равно загружает из инета, а скрипт при этом пишет, что "GE-из кэша" Предположу, что в НС отключено Настройки/Кэш/Управление/Игнорировать no-cache. Если так, то надо включить. Из скрипта я этим параметром управлять не могу.Цитировать Цитировать Уже ж вроде всё обсудили и обошли эти грабли? Граблей нет. Если клинит, давай посмотрим подробней...Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 22 июня 2009, 23:01:57 Цитировать Надо бы в шапку скрипта этот нюанс добавить. Добавил.Цитировать А что собственно смотреть? Единственная модификация скрипта (Connection:Close) - и гугл не ждёт по 30 сек после каждого запроса "из кэша" У меня такого нет. Причину того, что у тебя GE виснет, пока не пойму...Попробуй отключить в НС чтение из кэша, затем запустить Гуглу, дать ей прогрузиться, потом выйти из Гуглы и снова включить чтение из кэша. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 22 июня 2009, 23:17:18 Цитировать У меня такого нет. Причину того, что у тебя GE виснет, пока не пойму... Причина - другое железо, другая винда и другой набор софта/дров в системе. Видимо, это и вносит свою лепту.Цитировать Попробуй отключить в НС чтение из кэша, затем запустить Гуглу, дать ей прогрузиться, потом выйти из Гуглы и снова включить чтение из кэша. А разве это не равносильно тому, что я удаляю кэш HC - т.е. если он и пытается что-то оттуда прочесть, то безуспешно? Такое уже делал не раз. Да и вообще, не вижу смысла заострять внимание на этом вопросе. Решение есть, я себе эту часть в скрипт дописал - у меня заработало. Если нет желания вносить это в скрипт - хозяин барин. А если у кого-то ещё будут траблы, то они выйдут на эту тему (надеюсь). Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 22 июня 2009, 23:27:40 Цитировать Причина - другое железо, другая винда и другой набор софта/дров в системе. Видимо, это и вносит свою лепту. Нет.Цитировать Решение есть, я себе эту часть в скрипт дописал - у меня заработало. ОК. Для информации сообщаю, что скрипт, использующий Connection: close, ест лишних 5-8% процессорного времени (на моем двухъядерном). Это происходит из-за постоянного создания/закрытия потоков и всего, что с ними связано (виртуальных LUA-машин и т.п.). Одновременно такой скрипт качает из сети ощутимо медленнее за счет необходимости устанавливать с сервером большое количество соединений.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 22 июня 2009, 23:43:43 Цитировать Для информации сообщаю, что скрипт, использующий Connection: close, ест лишних 5-8% процессорного времени (на моем двухъядерном). :o да ну? А на моём двухъядерном HC вообще не занимает больше 3% процессорного времени. И это с Connection:Close... И то, это в основном когда идёт подгрузка из инета, а так 0..1,5%. Или это мой двухъядерник круче? :DНазвание: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 23 июня 2009, 07:25:59 Да, у меня отсталый. Если ему приходится работать с 1 потоком вместо 100, то работает быстрей и ест меньше ресурсов.
Во время активной работы (вращение глобуса по методике Parasite) использование ЦПУ колеблется от 0 до 11% (в случае с Connection: close от 0 до 18%). Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 23 июня 2009, 14:52:11 Версия 0.06 от 22.06.2009 Скрипт в его чистом виде - опять вешает клиента. Править ручками на тему Connection:Close (и тогда ОК). :rtfm:+ Лог ошибок (файл GE.log). Если он появится в папке со скриптом, подскажите мне, плиз * Учитывается состояние опции НС "Разрешить чтение из кэша" * Изменен текст сообщений в колонке "Правила" монитора - Слегка улучшено использование памяти Версия HC.182 - затык с проксированием HTTPS (secure-запросы не воспринимаются проксей, не появляются в мониторе и не обрабатываются, итог - Timeout). HC.183 - вроде опять заработало. Причина - другое железо, другая винда и другой набор софта/дров в системе. Видимо, это и вносит свою лепту. Причина в другом сетевом конфиге: у Михаила, вероятно, что-то убивает коннекты по окончании передачи контента(?). Это может делать файрвол, гейт, проксик, провайдер и далее по восходящей.У других этого может и не быть. :o да ну? А на моём двухъядерном HC вообще не занимает больше 3% процессорного времени. И это с Connection:Close... И то, это в основном когда идёт подгрузка из инета, а так 0..1,5%. Или это мой двухъядерник круче? :D Восьмипроцессорник Xeon с 24Гб рамы (из них под винду - 4Гб). Разницы в скорости двух скриптов не замечено даже при запуске пяти ГЕ в один HC. :P"Основные" (1.5-2% от каждого) тормоза - от собственно скроллинга ГЕ-глобуса и анизотропной фильтрации графики на максимуме (в каждом из ГЕ). Добавлено: 23 Июня 2009, 14:24:59 Во время активной работы (вращение глобуса по методике Parasite) использование ЦПУ колеблется от 0 до 11% (в случае с Connection: close от 0 до 18%). Это общее использование на всё - или использование именно HC? В ГЕ само вращение глобуса кушает вполне вменяемо (особенно если кучу слоев включить и софт-рендер заюзать, оййй....). Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 23 июня 2009, 19:48:31 Цитировать что-то убивает коннекты по окончании передачи контента(?) Нет. Коннект один раз установился, и по этому соединению идет хоть тысяча запросов. Для проверки включал GE вращаться на 1ч: раз и навсегда установились 4 соединения, по которым прошли все несколько тысяч запросов.Цитировать Это общее использование на всё - или использование именно HC? Только НС. Взгляд из Process Explorer. Гугл вращается со средней скоростью. Все берется из кэша.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 23 июня 2009, 22:04:10 zed, Parasite
Похоже, догадался, в чем у вас дело, хоть и не хотите помогать... ;) Вместо Connection: close впишите Connection: Keep-alive Причина проблем скорее всего в том, что клиент настроен на использование протокола HTTP 1.0 и будет поддерживать постоянные соединения только при взятии из кэша НС (и то только если указать Connection: Keep-alive) . При скачивании из сети соединение будет рваться/возобновляться после каждого запроса. Чтобы полностью перейти на постоянные соединения, надо в Свойствах обозревателя IE/Дополнительно поставить обе галки на использовании HTTP 1.1 Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 23 июня 2009, 22:37:17 Вместо Connection: close впишите Connection: Keep-alive Так я ж вроде 2 страницы назад сказал, что глючит не от того или другого конкретно, а от отсутствия прямого указания вообще. Keep-Alive тоже должно работать. Наверное (в связке с HC не проверял - Close вполне решило проблему на раз, дальше не рыл).в Свойствах обозревателя IE/Дополнительно поставить обе галки на использовании HTTP 1.1 Так стоят-ссс, еще со времен настройки сети в винде. Правда, дело осложняется тем что у меня винда не нативна на машине, а в песочнице. Впрочем, голый-то ГЕ - прекрасно работает. Попробую поиграться в обе стороны с настройками, и поставить парочку ГЕ на ночь для теста. Но вот сама идея менять что-то в системных настройках ради работоспособности отдельно взятого скрипта мне как-то не очень нравится. Ведь в любом случае будут юзеры, не разувшие глаза и не сделавшие этого\не разобравшиеся в написанном, и вопящие о глюках. Тысячи их. :( Имхо, лучше бы таки ограничиться именно скриптом, на крайний случай - прихватить и HC, но имхо не далее. Зато всё будет подконтрольно разработчику, и только ему. :) Решать, разумеется, не мне. Господа, а как насчет этого поста - http://handycache.ru/component/option,com_smf/Itemid,10/topic,2364.msg18977/#msg18977 ? У кого-нибудь есть идеи? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 23 июня 2009, 23:17:17 Чтобы полностью перейти на постоянные соединения, надо в Свойствах обозревателя IE/Дополнительно поставить обе галки на использовании HTTP 1.1 У меня галка "Использовать HTTP 1.1" стояла, а вот "Использовать HTTP 1.1 через прокси-соединения" - нет. Включение этой галки решило вопрос клина гугла. Убрал из скрипта Connection:Close - полёт нормальный.Михаил, респект! Таки докапался в чём сабака зарыта :) P.S. Только что поставил на виртуалку чистую винду (не ту сборку что у меня в системе, а другую), так вот, там ситуация с Connection:Close повторилась один в один. Т.е. пока не поставил галку "Использовать HTTP 1.1 через прокси-соединения" по-умолчанию настроенная система, работать со скриптом отказывалась, что не есть хорошо. Согласен с Parasite в том, что " лучше бы таки ограничиться именно скриптом... но не далее". Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 23 июня 2009, 23:34:48 Цитировать Но вот сама идея менять что-то в системных настройках ради работоспособности отдельно взятого скрипта мне как-то не очень нравится. Не обязательно менять системные настройки. Пишется Connection: Keep-alive в скрипте (со следующей сборки так и будет делаться), и скрипт работает при любых настройках. Только при настройках HTTP1.1 работает эффективней.Цитировать У кого-нибудь есть идеи? Скриптом такое проделать можно. А в чем замысел?Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 23 июня 2009, 23:48:53 Не обязательно менять системные настройки. Пишется Connection: Keep-alive в скрипте (со следующей сборки так и будет делаться), и скрипт работает при любых настройках. Только при настройках HTTP1.1 работает эффективней. Ага, а в шапку скрипту инфу о том, как сделать его наиболее эффективным ;)Цитировать У кого-нибудь есть идеи? Скриптом такое проделать можно. А в чем замысел?А можно скриптом добавлять к имени номер не по порядку, а тот, что записан в седьмом байте файла? И не плохо бы, рядом со вновь скачанным дбрутом ложить текстовичёк с датой из заголовка Last-Modified (или к имени самого дбрута добавлять эту инфу). Для статистики, так сказать. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 24 июня 2009, 00:06:03 Цитировать Замысел в том, чтобы не затирался dbRoot, хотелось бы, знаете ли, оставить его "на память", авось когда и пригодится. Это не замысел, это как раз просьба, что и была высказана в том посте. А для чего так делать? Что это дает для целей кэширования или еще для каких?Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 24 июня 2009, 07:58:31 Не обязательно менять системные настройки. Пишется Connection: Keep-alive в скрипте (со следующей сборки так и будет делаться), и скрипт работает при любых настройках. Так в этом же и был цимус: принудительно указывать в скрипте состояние коннекта. Close ли, Alive ли....лично мне более ближе Close (траху меньше на nix-системах - подвисшие сокеты не надо ручками отслеживать и давить). :) Докладаюсь: 1. Вставка в скрипт Connection: Keep-alive вместо Connection: Close: всё работает как и предсказывалось ранее, никакой визуальной разницы не видно в т.ч. и на файрволе (ну, кроме изменившейся этой строчки). 2. Пляска в разные стороны с двумя вышеуказанными галочками (в скрипте - Connection: Keep-alive): всё работает, никакой визуальной разницы не видно. 3. Пляска в разные стороны с двумя вышеуказанными галочками (в скрипте - Connection: Close): всё работает, никакой визуальной разницы не видно. 4. Пляска в разные стороны с двумя вышеуказанными галочками (в скрипте - оторвано указание про Connection вообще, то есть скрипт в его первоначальном виде от Михаила): клиент виснет за время 5...15 минут при ЛЮБОЙ комбинации галочек, как и указано в первом посте этой ветки. Да, кстати - при Keep-Alive у меня не получается "Коннект один раз установился, и по этому соединению идет хоть тысяча запросов"© ни при какой комбинации настроек. Михаил, не могли бы дать свой дамп этой ситуации со сниффера? Погляжу, в чем разница... Добавлено: 24 Июня 2009, 07:45:29 Цитировать Замысел в том, чтобы не затирался dbRoot, хотелось бы, знаете ли, оставить его "на память", авось когда и пригодится. Это не замысел, это как раз просьбаА для чего так делать? Что это дает для целей кэширования или еще для каких? Это позволяет иметь "в коллекции" все дбруты согласно их версий. Сугубо для истории - в плане кэширования это не дает ровным счетом ничего, ну разве что задачи "взять дбрут версии N и подсунуть в кэш, чтобы клиенту отдавался именно он вместо текущего гуглевого".В дбрутах помимо всего прочего описываются параметры доступных для клиента слоев, где каждый слой может иметь кучу условий для показа в разных версиях ГЕ, да и устаревшие версии клиента хотят как правило дбрут не выше определенной версии оного (например, для третьего это дбрут где-то 134...150 версии, тогда как сейчас на гугле 204я версия) - а в противном случае старичку рвет крышу.... Короче, эту фичу с дбрутом очень желательно бы иметь. :) Добавлено: 24 Июня 2009, 07:55:18 Цитировать Попытка закэшировать авторизацию? Да. Это все закомментировано.ГЕ.ЛОКАЛ прекраснейше жрет кэшированные ответы авторизации гугля, чем сама необходимость логина на сервера Гугля отпадает и ГЕ становится полностью локальным и при том - всё еще работоспособным. :) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 25 июня 2009, 11:47:53 Так в этом же и был цимус: принудительно указывать в скрипте состояние коннекта. Close ли, Alive ли.... Не в этом. НС должен был закрыть соединение, но этого не делал. Похоже, ошибка НС.mai62 Запрос HTTP 1.0. Скрипт формирует ответ без заголовка Connection (Proxy-Connection). При таком раскладе НС, похоже, не закрывает соединение после передачи ответа, и оно подвисает. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 25 июня 2009, 13:05:54 Не в этом. НС должен был закрыть соединение, но этого не делал. Похоже, ошибка НС. Не знаю, Вам виднее. :) Скажу лишь, что у меня сабж в 100% повторяем и без HC (клиент->(апач+перлскрипт)->сервер ГЕ, получаем висняки сокетов если Перлом принудительно не формировать Сonection:Close при отдаче контента в клиент, причем висняк будет бесконечным и очень скоро настает переполнение очереди. Solaris 10, Апач 1.3.35 (емнимс). Proxy-Connection тоже не формирую. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 25 июня 2009, 15:33:16 Михаил
Цитировать Запрос HTTP 1.0. Скрипт формирует ответ без заголовка Connection (Proxy-Connection). При таком раскладе НС, похоже, не закрывает соединение после передачи ответа, и оно подвисает. А если в запросе HTTP 1.0, а в ответе HTTP 1.1, то на кого ориентироваться? И что было в поле Connection в запросе? Не проще в ответе явно написать?Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 25 июня 2009, 16:25:05 И что было в поле Connection в запросе? Не проще в ответе явно написать? Клиент всегда просит 1.1\KeepAlive.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 25 июня 2009, 16:48:55 на кого ориентироваться? На того, кому отвечаем. Он должен нас понять.Цитировать Не проще в ответе явно написать? Дело не в простоте. Пользователь формирует с помощью скрипта валидный с точки зрения стандарта HTTP ответ. И вправе быть уверенным в том, что НС тоже действует по стандарту при отправке такого ответа клиенту.В нашем случае клиент HTTP 1.0 (Гугл) получает от НС ответ без заголовка Connection и по логике этой версии протокола бремя закрытия соединения оставляет серверу (HC). Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 25 июня 2009, 17:14:02 Цитировать Дело не в простоте. Пользователь формирует с помощью скрипта валидный с точки зрения стандарта HTTP ответ. И вправе быть уверенным в том, что НС тоже действует по стандарту при отправке такого ответа клиенту. Я читал в стандарте, что если http 1.0 клиент опускает в заголовке поле Connection, то клиент рассматривает соединение как Непостоянное. Но я нигде не читал, что СЕРВЕР отвечая http 1.0 клиенту может опустить в ответе поле Connection и это будет равносильно наличию Connection: close. Если я это упустил, дай цитату. Я же вижу вот, чтоВ нашем случае клиент HTTP 1.0 (Гугл) получает от НС ответ без заголовка Connection и по логике этой версии протокола бремя закрытия соединения оставляет серверу (HC). Цитировать 8.1.2.1 Negotiation Я не против сделать по стандарту. Просто я нигде не нахожу исчерпывающего ответа на возникающие у меня вопросы, слишком тут все запутано и по этой причине чревато ошибками. Считаю, что явное указание желаемого поведения в заголовке позволит избежать разночтений и сделать работу надежной.An HTTP/1.1 server MAY assume that a HTTP/1.1 client intends to maintain a persistent connection unless a Connection header including the connection-token "close" was sent in the request. If the server chooses to close the connection immediately after sending the response, it SHOULD send a Connection header including the connection-token close. An HTTP/1.1 client MAY expect a connection to remain open, but would decide to keep it open based on whether the response from a server contains a Connection header with the connection-token close. In case the client does not want to maintain a connection for more than that request, it SHOULD send a Connection header including the connection-token close. If either the client or the server sends the close token in the Connection header, that request becomes the last one for the connection. Clients and servers SHOULD NOT assume that a persistent connection is maintained for HTTP versions less than 1.1 unless it is explicitly signaled. See section 19.6.2 for more information on backward compatibility with HTTP/1.0 clients. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 25 июня 2009, 17:55:50 Цитировать я нигде не читал, что СЕРВЕР отвечая http 1.0 клиенту может опустить в ответе поле Connection и это будет равносильно наличию Connection: close. Для "чистого" клиента http 1.0 заголовок Connection ничего не значит. В этой версии протокола такого заголовка не предусмотрено.Цитировать Считаю, что явное указание желаемого поведения в заголовке позволит избежать разночтений и сделать работу надежной. Если в ответе пишем Connection: close, НС закроет соединение сам или будет ждать этого от клиента?Цитировать дай цитату RFC 1945, регламентирующий http 1.0:Цитировать Except for experimental applications, current practice requires that Видимо, этой логики придерживается Гугл, выступая в роли клиента http 1.0 при отсутствии в ответе заголовка Connection.the connection be established by the client prior to each request and closed by the server after sending the response. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 25 июня 2009, 18:15:32 Цитировать Если в ответе пишем Connection: close, НС закроет соединение сам или будет ждать этого от клиента? Закроет сам.Цитировать Видимо, этой логики придерживается Гугл, выступая в роли клиента http 1.0 при отсутствии в ответе заголовка Connection. Я сам не проверял, но Parasite пишет же, что Цитировать Клиент всегда просит 1.1\KeepAlive. Мало того, что 1.1, так еще и KeepAlive.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 25 июня 2009, 18:26:45 Цитировать я нигде не читал, что СЕРВЕР отвечая http 1.0 клиенту может опустить в ответе поле Connection и это будет равносильно наличию Connection: close. Для "чистого" клиента http 1.0 заголовок Connection ничего не значит.Лично я бы не ждал от него идеального соответствия RFC именно по этому поводу. Предположительно, конечно. Сказать же точнее - это надо иметь сорцы на сам ГЕ и на его сервер, чего разумеется у нас нет и не будет. :( Добавлено: 25 Июня 2009, 18:20:53 Я сам не проверял, но Parasite пишет же, что Да. В аттаче - классический заголовок классического ГЕ на прямом коннекте.Цитировать Клиент всегда просит 1.1\KeepAlive. Мало того, что 1.1, так еще и KeepAlive.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 25 июня 2009, 19:03:57 Гугл зависаниями дал раскопать, что клиент 1.0 не берет на себя бремени закрытия соединения. Поэтому если отвечаем клиенту 1.0, и ответ не содержит явную попытку сохранить соединение в виде (Proxy-)Connection: keep-alive, то НС должен закрыть соединение после передачи ответа. Иначе разработчик скрипта, сформировав правильный с точки зрения стандарта ответ, рискует получить зависание.
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 25 июня 2009, 20:19:13 Гугл зависаниями дал раскопать, что клиент 1.0 не берет на себя бремени закрытия соединения. Поэтому если отвечаем клиенту 1.0, и ответ не содержит явную попытку сохранить соединение в виде (Proxy-)Connection: keep-alive, то НС должен закрыть соединение после передачи ответа. Иначе разработчик скрипта, сформировав правильный с точки зрения стандарта ответ, рискует получить зависание. Отсюда вопрос ребром: стоит ли редактировать ВЕСЬ (как сущность) HC для нужд одной-единственной не самой серьезной программы - либо же достаточно подредактировать скрипт, напрямую давая понять что делать с соединением?Лично я за второй вариант. Проблемы и недоработки ГЕ не обязаны влиять на весь HC, имхо - коль скоро HC делается не только под ГЕ. Для ГЕ достаточно будет и скрипта, по-моему - в нем и без этого багов немало, под каждый HC менять не будем же... Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 25 июня 2009, 22:55:40 Проблема другая: обнаружена ошибка НС. О Гугле и скрипте GE.lua вопрос уже несколько дней не стоит - там все решено и работает. Пишу в этой теме только "по инерции" из-за того, что здесь была обнаружена эта ошибка. Касается она работы с любым http 1.0 клиентом. Возьми IE - зависнет и он, возьми другой клиент - может зависнуть и он...
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 26 июня 2009, 13:01:15 здесь была обнаружена эта ошибка. Касается она работы с любым http 1.0 клиентом. Возьми IE - зависнет и он, возьми другой клиент - может зависнуть и он... Понятно. Тогда, разумеется, надо решать.Автору HC: ну когда же, КОГДА появится желаемая возможность сортировки скриптом по папкам кэша? :) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 26 июня 2009, 13:07:28 Цитировать ну когда же, КОГДА появится желаемая возможность сортировки скриптом по папкам кэша? Такая версия уже тестируется, доработаю описание и дам тебе потестировать. А ты сам попробуешь скрипт написать?Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 26 июня 2009, 14:03:37 Такая версия уже тестируется, доработаю описание и дам тебе потестировать. А ты сам попробуешь скрипт написать? Постараюсь, хотя с LUA знаком на уровне "Чуваки, гля какую хрень тут в инете откопал...!" :) Кстати, почему именно LUA? Посему не, например, Perl с его вкусными регэкспами и мощью по обработке строк (самое оно для HC, имхо - с его массовыми разборами\заменами УРЛов)? Он тоже бесплатный. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 26 июня 2009, 15:14:18 Lua показался мне наиболее подходящим для возложенных на него задач в контексте его использования в НС. Очень легкий в изучении язык, позволяет сразу после знакомства писать короткие скрипты, что чаще всего и нужно для НС. В то же время, если надо, можно копнуть глубже и найти средства для решения почти любой задачи (в том числе и PCRE).
Тут более подробно по этому вопросу http://lua-users.org/wiki/LuaVersusPerl Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 26 июня 2009, 20:14:41 Lua показался мне наиболее подходящим для возложенных на него задач в контексте его использования в НС. Очень легкий в изучении язык, позволяет сразу после знакомства писать короткие скрипты, что чаще всего и нужно для НС. В то же время, если надо, можно копнуть глубже и найти средства для решения почти любой задачи (в том числе и PCRE). Понятно.Тут более подробно по этому вопросу http://lua-users.org/wiki/LuaVersusPerl А в какой мере HC поддерживает язык LUA? В полной, или с какими-то ограничениями\кастрациями\обрезками функционала? По вышеприведенной ссылке невнятно упоминалось, что есть возможность вызова перловых скриптов из-под LUA (and vice versa): Цитировать There is an implementation of Lua on Parrot. Inline::Lua [44] and [Lux] (though not recently maintained) embed Lua in Perl. There is a way to call Perl from Lua [45]. (#ref пока не читал - чуть позже).Значит ли это, что я теоретически могу подключить свои перловые скрипты в HC - и они будут работать в своем полном перловом обьеме со всеми стандартными фичами, багами и уже перловыми модулями и расширениями себя любимого? :) Тогда бы HC стала (для меня) действительно универсальной, и без необходимости изучения экзотики в виде LUA. Как считаете? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: mai62 от 26 июня 2009, 20:22:40 НС не ограничивает возможностей lua. Пробуй.
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 04 июля 2009, 07:12:52 Цитировать ну когда же, КОГДА появится желаемая возможность сортировки скриптом по папкам кэша? Такая версия уже тестируется, доработаю описание и дам тебе потестировать. А ты сам попробуешь скрипт написать?Код: function GENameStringToXY(NAME:string;Level:byte):TPoint; Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 04 июля 2009, 07:42:09 Будет как-то так:
Цитировать function GENameStringToXY(NAME, Level) -- переменная NAME - строка с цифро-именем: NAME='01230123' -- Level - зум - длина строки NAME local X = 0 -- инициализация X,Y и если Level=1 то и local Y = 0 -- ответ функции for i=2,Level do -- цикл от 2 до Level X = X*2 -- ответ увеличиваем в 2 раза Y = Y*2 local ch = NAME:sub(i,i) if ch == '0' then Y = Y+1 -- к Y прибавляем 1 если символ '0' elseif ch == '1' then X = X+1 -- если символ '1' и к X и к Y прибавляем 1 Y = Y+1 elseif ch == '2' then X = X+1 end end return X, Y end Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 04 июля 2009, 21:17:30 Будет как-то так: О, спасибо! Попробую.И последний (надеюсь) вопрос: как в LUA из filename, например, f1c-xxxxxxxx.yyy.zzz выпарсить соответственные числовые параметры в переменные X, Y и Z для дальнейшего пересчета? Пробовал по-перловскому, через регекспы - еррорит и не исполняет уже весь скрипт...:( PS: это все в тему сортировки тайлов ГЕ, так что просьба не считать за оффтоп. Спасибо. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 04 июля 2009, 21:38:28 Можно попробовать так:
Цитировать local X,Y,Z = filename:match('%w+%-(%d+)%.(%d+)%.(%d+)') Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 05 июля 2009, 20:54:04 Никак не получается переназначить имя в кэше...
Код: -- если запрошенный файл не составной, то не обновляем его Что я не так делаю? :( Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 05 июля 2009, 23:29:18 hc.cache_file_name в этом контексте только для чтения, поэтому присваивание ничего не делает.
Вот пример как реализовать разбрасывание по папкам кэша, который можно подправить под свой вкус. Только не помню, начиная с какой сборки НС это будет работать. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 06 июля 2009, 07:29:43 Вот пример как реализовать разбрасывание по папкам кэша, который можно подправить под свой вкус. Вот спасибо!! Сегодня будем опять поковырять. :) hc.cache_file_name в этом контексте только для чтения, поэтому присваивание ничего не делает. Хм. Хотелось бы понять - а в каком контексте переменная таки становится доступной для записи? Я пробовал по-разному - а результат всегда был один: невозможность перекрытия пути в кэше, подготовленного HC стандартными средствами. Хотя, исходя из примера данного автором HC:Код: function conv() Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: DenZzz от 06 июля 2009, 08:32:14 Просьба ткнуть носом, где я неправ и почему у меня не получается? В чем заключается секрет окрытия hc.cache_file_name на запись, чего я не сделал в моем случае выше и у меня оно не работает? HCExtensions.html читал? Запись в переменную hc.cache_file_name возможна только из события URLToFileNameConverting. А ты из какого события писать пытаешься? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 06 июля 2009, 09:21:18 HCExtensions.html читал? Запись в переменную hc.cache_file_name возможна только из события URLToFileNameConverting. А ты из какого события писать пытаешься? Упс...Слона-то я и не приметил...Пасиб.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 07 июля 2009, 22:34:47 Вот пример как реализовать разбрасывание по папкам кэша, который можно подправить под свой вкус. Модифицировал. Всё почти работает и уже раскидывает по папкам как надо - конвейер по скачке кэша заработал в прежнем порядке, спасибо всем присутствующим. Только не помню, начиная с какой сборки НС это будет работать. Осталось только два мелких вопроса сугубо косметического свойства, на которые знатокам не составит труда ответить - а у меня не хватает ума додумать самостоятельно ввиду поверхностного знакомства с LUA. Итак, имеем: Код: function conv() Вопросы: 1. Дбрут в настоящее время кладется в ./Earth/hl=ru-RU&gl=ru. Как заставить его жить в ./Earth/dbRoot.v5/dbroot (<-- это файл без расширения, а не папка) 2. Иконки в настоящее время кладутся в ./Earth/z1/0/x0/0/lf-0-icons/*.png. Как заставить их жить в ./Earth/Icons/*.png? Насколько я понимаю, так как в "lf-0-icons" есть цифра - то на нее и срабатывает "if digits then"...? Я опять что-то намудрил с условиями в скрипте? :( Всё остальное работает и раскладывается просто изумительно. Спасибо. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 08 июля 2009, 07:59:20 Можно попробовать так (сам не проверял).
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 13 июля 2009, 21:05:11 Можно попробовать так (сам не проверял). Спасибо, заработало. Вопрос с сортировкой тайлов можно считать закрытым.Михаил, не подскажете, как средствами LUA прочитать байт из (существующего на диске) файла по определенному смещению? Нужно для организации "складирования" дбрутов. Спасибо. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 14 июля 2009, 22:32:59 Можно попробовать так (смещение offset считаем от нуля, вместо 'c:\\tt.txt' пишем свой путь к файлу):
Цитировать local ff=io.open('c:\\tt.txt', 'rb') В value искомый байт.ff:seek('set', offset) value = string.byte(ff:read(1)) ff:close() Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 16 июля 2009, 21:36:41 Можно попробовать так (смещение offset считаем от нуля, вместо 'c:\\tt.txt' пишем свой путь к файлу): Спасибо. Уже сделал раскладку дбрутов, но есть маленькая, но последняя проблемка: io.open() работает только с абсолютными путями, насколько я понимаю? При указании абсолютного пути ручками в io.open - всё работает. Но это не очень красиво, хотелось бы полного автоматизма. Как мне получить абсолютный путь до файла в кэше в функции conv() Вашего скрипта? Это событие URLToFileNameConverting, в котором я к сожалению не могу читать hc.cache_file_name... Максимум, что добился - это нашел доступный hc.prepare_url(url), но это относительный путь уже в кэше, а не абсолютный - и его io.open() не жрет... :(Цитировать local ff=io.open('c:\\tt.txt', 'rb') В value искомый байт. Также надо будет решить вопрос с двойными слэшами в абсолютном пути у Вас в примере в предыдущей мессаге, но с одиночными - в выходе hc.prepare_url(url). Вот кусок кода. Помогите, пожалуйста. Код:
Спасибо. Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 16 июля 2009, 22:17:13 Почему эти действия выполняются в процедуре определения имени файла (обработчике URLToFileNameConverting)? Так будет ошибка.
Надо их выполнять в обработчике поступающего тела файла: - начали получать из сети файл дбрут - прочли его 6 и 7 байты, по ним определили version - если файл dbroot.version уже есть в кэше, то прерываем скачивание файла и отдаем из кэша - если файла нет в кэше, то пишем его туда под именем dbroot.version А все-таки, как применить накопленные дбруты предыдущих версий? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 16 июля 2009, 22:41:19 Почему эти действия выполняются в процедуре определения имени файла (обработчике URLToFileNameConverting)? Так будет ошибка. Разве не красивее иметь логику раскладки дбрутов именно там же, где и логику раскладки всего остального? Ведь вопрос-то всего-то в пути до файла, и всё заработает. Я бы хотел по возможности получить абс.путь до файла в кэше именно в рамках conv(), если это технически возможно. Но вот не знаю, возможно ли... Давайте все-таки рассмотрим этот вариант, если возможно. :) Надо их выполнять в обработчике поступающего тела файла А все-таки, что дает накопление дбрутов разных версий? Так ведь отвечалось же уже... http://handycache.ru/component/option,com_smf/Itemid,10/topic,2364.msg19035/#msg19035Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 16 июля 2009, 23:03:25 Цитировать Так ведь отвечалось же уже... Сорри, неправильно вопрос поставил. Изменил. Каков механизм применения накопленных дбрутов предыдущих версий? Этот механизм тоже надо делать в расширении?Цитировать Разве не красивее иметь логику раскладки дбрутов именно там же, где и логику раскладки всего остального? Ведь вопрос-то всего-то в пути до файла, и всё заработает. Я бы хотел по возможности получить абс.путь до файла в кэше именно в рамках conv(), если это технически возможно. Но вот не знаю, возможно ли... Давайте все-таки рассмотрим этот вариант, если возможно. Здесь правильность страдает, поэтому о красоте говорить не приходится. Если не убедил, то:Цитировать local source = hc.cache_path .. hc.prepare_url(url) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 16 июля 2009, 23:16:31 Цитировать Так ведь отвечалось же уже... Сорри, неправильно вопрос поставил. Изменил. Каков механизм применения накопленных дбрутов предыдущих версий? Этот механизм тоже надо делать в расширении?Они нужны в крайне немногочисленных ситуациях (но таки нужны), кои можно обработать и ручками по необходимости - переименовать один отдельно взятый файл ручками проще простого. Например, для ГЕ-трешки новые дбруты противопоказаны (еррорит и падает), но кое-какие задачи в ГЕ проще делать именно в трешке, для чего оную трешку нужно пустить - для чего и скормить ей дбрут, какой доктор прописал. Цитировать Разве не красивее иметь логику раскладки дбрутов именно там же, где и логику раскладки всего остального? Ведь вопрос-то всего-то в пути до файла, и всё заработает. Я бы хотел по возможности получить абс.путь до файла в кэше именно в рамках conv(), если это технически возможно. Но вот не знаю, возможно ли... Давайте все-таки рассмотрим этот вариант, если возможно. Здесь правильность страдает, поэтому о красоте говорить не приходится. Если не убедил, то:Цитировать local source = hc.cache_path .. hc.prepare_url(url) Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 17 июля 2009, 12:38:44 - начали получать из сети файл дбрут А мне такая логика нравится. Можете её реализовать в скрипте?- прочли его 6 и 7 байты, по ним определили version - если файл dbroot.version уже есть в кэше, то прерываем скачивание файла и отдаем из кэша - если файла нет в кэше, то пишем его туда под именем dbroot.version Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 17 июля 2009, 20:35:06 А мне такая логика нравится. Можете её реализовать в скрипте? Ога. А вот и скрипт, который уже работает - Михаилу, как гуру, в виде полуфабриката. У меня мозгов на вышеуказанный алгоритм уже не хватит.PS: так как в скрипте присутствует "фича" :) анализа версии дбрута в момент генерации пути в кэше, еще ДО покладания нового скачиваемого дбрута в кэш - то анализируется версия не та, которая качается, а та которая уже присутствует в кэше на данный момент. Задним числом, так сказать. :) Учитывая то, что дбруты на гугле меняются далеко не раз в минуту - это абсолютно не напрягает. Некрасиво конечно, но уж на сколько хватило моих знаний в LUA... работает, и то хлеб. Авось кто из гуру таки доработает напильником. ??? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Михаил от 17 июля 2009, 22:06:20 Parasite, zed
Тайлы GoogleMaps соответствуют тайлам GoogleEarth? Если да, то при заходе на maps.google.ru можно, получается, брать из кэша GoogleEarth и наоборот? Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 17 июля 2009, 22:30:02 Тайлы GoogleMaps соответствуют тайлам GoogleEarth? Э... категорически нет. Мало того, что тайлы GE и GM в разной географической проекции, так GE тайлы ещё и зашифрованы. Но в принципе, все алгоритмы известны, и при желаниии можно написать скрипт приводящий в соответствие GE и GM налету, но вот только это на быстродействии сильно скажется. И уже есть рабочий вариант преобразования налету GE тайлов из кэша, в GM-подобные тайлы: GeoCacher + SAS.Планета.Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: zed от 21 июля 2009, 15:50:05 Так-с, у гугла появился ещё один режим - Луна. Идут url вида: http://khmdb.google.com/flatfile?db=moon&f1-0311132-i.3+f1-0311201-i.3&v=1
Для того, чтоб скрипт начал сортировать и этот сервер, в GE.lua добавляем правило: Код: url = re.replace(url, [[_/\Kdb=moon&]], 'Moon/') Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parasite от 24 июля 2009, 22:43:26 Авось кто из гуру таки доработает напильником. ??? Господа, есть ли смысл ожидать "обнапильненного" скрипта в гуру-обработке в скором времени, или довольствоваться тем что есть? :) Благо что работает вроде как...Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: crazyyyk от 13 декабря 2009, 14:55:42 Подскажите какая на данный момент последняя версия плагина для GE? А то у меня стоит 0.06 и HC 1.0.0.232 и при работе с GE он все берет из интернета, из кеша ничего не берется, может как то настроить нужно?
Название: Re: HandyCache + GE.lua (кэширование GoogleEarth) Отправлено: Parcher от 25 декабря 2009, 10:48:27 Еще одно наблюдение: при переустановке системы (Vista на 7) GoogleEarth не может отобразить глобус. В мониторе НС написано, что все грузиться из кэша и так продолжается до тех пор, пока не выйдешь из GoogleEarth. Так же при работе через НС некоторые ранее просмотренные места не могут отображаться (по той же причине), а как только отключаешь "чтение из кэш", то сразу идет загрузка. Если нужен лог, то скину, но навряд ли он что-нибудь покажет.
Название: Google Earth + HandyCache Отправлено: Jonny от 07 января 2010, 08:37:19 Нигде не нашел как использовать Google Earth c HandyCache.
Галочку разрешить в настройках напротив "Google Earth caching" поставил - ничего незаработало... Подскажите что к чему, где читать, как установить. Название: Re: Google Earth + HandyCache Отправлено: mai62 от 08 января 2010, 11:17:56 Обсуждение этого расширения находится здесь
http://handycache.ru/forum/index.php?topic=2364.0 Название: Re: Google Earth + HandyCache Отправлено: Jonny от 08 января 2010, 19:04:02 Обсуждение этого расширения находится здесь http://handycache.ru/forum/index.php?topic=2364.0 мне повторить вопрос там? в данный момент по моему вопросу там ничего нет. Название: Re: GE.lua - расширение HC для кэширование Google Earth Отправлено: Zoynels от 23 января 2010, 21:04:21 Jonny
Нужно в фале GE.lua заменить строчку: hc.cache_file_name = hc.prepare_url(url) на вот эту и все должно заработать. hc.preform_cache_file_name(hc.prepare_url(url)) Название: Re: GE.lua - расширение HC для кэширование Google Earth Отправлено: Jonny от 27 января 2010, 11:04:50 Zoynels, не помогло.
Помогите! Что же делать! Почему не работает? Название: Re: GE.lua - расширение HC для кэширование Google Earth Отправлено: zed от 07 августа 2010, 02:13:32 Обновил скрипт до рабочего состояния, плюс написал небольшой хелп: http://starmen.at.tut.by/handycache.htm
Powered by SMF 1.1.3 SMF © 2006, Simple Machines LLC
Joomla Bridge by JoomlaHacks.com |