HandyCache форум

Главная категория => Дополнения, плагины => Тема начата: Parasite от 15 июня 2009, 18:45:42



Название: 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% случаях.
- удаляем кэш гуглу, и HC заодно
- запускаем гугл и даём прогрузить Землю, ничё не трогаем - загрузка идёт как по маслу
- опять удаляем кэш гуглу (теперь всё что загружал гугл у нас в кэше HC)
- запускаем гугл - подвисон на первом же запросе из кэша!
15 раз подряд сделал - не висит.

Посмотрите, кто может, есть ли эти же проблемы с моим списком Преобразования URL.


Название: Re: HandyCache + GE.lua (кэширование GoogleEarth)
Отправлено: Parasite от 15 июня 2009, 20:06:51
У меня ребенок юзает много дней (для него писалось) - и такого нет. Давайте чтоб уже говорить об одной и той же сборке вооружимся последней (в аттаче). В ней, похоже, эта же проблема присутствует. Буду пытаться воспроизвести...
15 раз подряд сделал - не висит.
Сделал 2 раза. На 2м проходе 2го раза - клиенту сорвало крышу.
GE 5.0.11733, HC .180 (и в ее составе - GE.lua). Винда ХП СП3. :(

С новым вариантом из аттача - попробую, спасибо.

Посмотрите, кто может, есть ли эти же проблемы с моим списком Преобразования URL.

У меня другие замены (для раскладки тайлов по папкам, пока этого не научился делать сам скрипт). Вот часть касательно ГЕ:
Код:
False#~#----- Сортировка тайлов GoogleEarth -------#~##~#False#~#False#~#0
True#~#^(kh|khmdb)\.google\.com/#~#_GE_TILES_CACHE_/#~#True#~#True#~#18970
True#~#(?!.*\+)(flatfile|(dbRoot\.v\d+))\?db=tm\&#~#History/#~#True#~#True#~#16
True#~#(?!.*\+)(flatfile|(dbRoot\.v\d+))\?db=sky\&#~#Sky/#~#True#~#True#~#0
True#~#(?!.*\+)(flatfile|(dbRoot\.v\d+))\?db=mars\&#~#Mars/#~#True#~#True#~#0
True#~#(?!.*\+)(flatfile|(dbRoot\.v\d+))\?#~#Earth/#~#True#~#True#~#18859
True#~#If-0-icons/#~#Icons#~#True#~#True#~#0
True#~#hl=(..|..-..)\&gl=..#~#dbRoot.v5/dbRoot#~#True#~#True#~#23
True#~#/(?!.*\+)f1-\d+-i\.(\d+)#~#/Bitmaps/\1\0#~#True#~#True#~#4112
True#~#/(?!.*\+)(f1-\d+-d)\.(\d+)\..*#~#/Textures\0#~#True#~#True#~#16
True#~#/(?!.*\+)f1c-\d+-t\.(\d+)#~#/Terrains/\1\0#~#True#~#True#~#3892
True#~#/(?!.*\+)f1c-\d+-d\.(\d+)\.(\d+)#~#/Layers/\1/\2\0#~#True#~#True#~#8667
True#~#/(?!.*\+)q2-\d+-q\.(\d+)#~#/Queries/\1\0#~#True#~#True#~#2127
True#~#/(?!.*\+)(f1|f1c|q2|qp)-\d{1}-#~#/z1\0#~#True#~#True#~#12
True#~#/(?!.*\+)\w+-\d{2}-#~#/z2\0#~#True#~#True#~#36
True#~#/(?!.*\+)\w+-\d{3}-#~#/z3\0#~#True#~#True#~#80
True#~#/(?!.*\+)\w+-\d{4}-#~#/z4\0#~#True#~#True#~#471
True#~#/(?!.*\+)\w+-\d{5}-#~#/z5\0#~#True#~#True#~#1811
True#~#/(?!.*\+)\w+-\d{6}-#~#/z6\0#~#True#~#True#~#4658
True#~#/(?!.*\+)\w+-\d{7}-#~#/z7\0#~#True#~#True#~#1491
True#~#/(?!.*\+)\w+-\d{8}-#~#/z8\0#~#True#~#True#~#922
True#~#/(?!.*\+)\w+-\d{9}-#~#/z9\0#~#True#~#True#~#688
True#~#/(?!.*\+)\w+-\d{10}-#~#/z10\0#~#True#~#True#~#215
True#~#/(?!.*\+)\w+-\d{11}-#~#/z11\0#~#True#~#True#~#602
True#~#/(?!.*\+)\w+-\d{12}-#~#/z12\0#~#True#~#True#~#829
True#~#/(?!.*\+)\w+-\d{13}-#~#/z13\0#~#True#~#True#~#858
True#~#/(?!.*\+)\w+-\d{14}-#~#/z14\0#~#True#~#True#~#535
True#~#/(?!.*\+)\w+-\d{15}-#~#/z15\0#~#True#~#True#~#1652
True#~#/(?!.*\+)\w+-\d{16}-#~#/z16\0#~#True#~#True#~#1014
True#~#/(?!.*\+)\w+-\d{17}-#~#/z17\0#~#True#~#True#~#1373
True#~#/(?!.*\+)\w+-\d{18}-#~#/z18\0#~#True#~#True#~#561
True#~#/(?!.*\+)\w+-\d{19}-#~#/z19\0#~#True#~#True#~#809
True#~#/(?!.*\+)\w+-\d{20}-#~#/z20\0#~#True#~#True#~#215
True#~#/(?!.*\+)\w+-\d{21}-#~#/z21\0#~#True#~#True#~#0
True#~#/(?!.*\+)\w+-\d{22}-#~#/z22\0#~#True#~#True#~#0
True#~#/(?!.*\+)\w+-\d{23}-#~#/z23\0#~#True#~#True#~#0
True#~#/(?!.*\+)\w+-\d{24}-#~#/z24\0#~#True#~#True#~#0
False#~#----- Конец cортировки тайлов 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

00000000   01 04 12 00 00 00 2C 10  00 00 2C 16 00 00 CD 1C   ......,...,...Í.
00000010   00 00 55 97 78 32 CF 09  00 42 0F 81 80 F3 A7 9C   ..U—x2Ï..B.�?ó§œ
последовательно разберу по байтам:
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
Появилась одна идея. Выложил другую сборку.
Предварительно удалить кэши НС (дисковый и RAM) и GE.
Есть мысль о том, что глючит не сам скрипт как таковой, а механизм его взаимодействия с HC (и контент бьется не на стадии собирания его скриптом, а на стадии его передачи в HC, либо от HC в 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
НО вопрос остаётся ребром - почему гугл стопорит? 
Вот 2 лога. Первый: кэши и у GE и у HC пусты - загрузка идёт без проблем. Второй: кэш пуст только у GE - ступор после первого же тайлового запроса, тут это отлично видно - 30 сек ожидание неизвестно чего...
Подтверждаю проблему и с версией ГЕ 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)
Более того, четверка не так бронебойна как 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>
@name          Google Earth caching
@author        nadenj@mail.ru
@version       0.05sr1
@description   Google Earth flatfiles caching
@rule          kh(mdb)?\.google\.com/flatfile\?
@event         RequestHeaderReceived/request
</HCExtension> ]]

--[[*********************************************************************************
   Учитывать: 1. Не рассчитано на использование дополнительного кэша (я не нашел
                 способа определять с помощью Lua-API, в каком из кэшей найден файл)
              2. Будет неправильно работать при отключении чтения из кэша (это при
                 желании можно доработать)
*************************************************************************************]]


-- Переводит целое число в 4-символьную строку, содержащую его машинное представление
--(для записи целого в память или файл)
 local function IntToChars(int)
   local ch = ''
   for j=1,4 do
     ch = ch .. string.char(int%256)
     int = math.floor(int/256)
   end
   return ch
 end
 
-- обратная функция
 local function CharsToInt(chr)
   local int = 0
   for j=1,4 do
     int = int + string.byte(chr:sub(j,j))*256^(j-1)
   end
   return int
 end

-- local URLBase

local function OriginURL(cut_url)
    if cut_url:find('+', 1, true) then
        return re.replace(URLBase, '===', cut_url)
    end
    return re.replace(URLBase, '===.*', cut_url)
end

-- ********** О Б Р А Б О Т К А   З А Г О Л О В К А   З А П Р О С А **********
   
function request()

    -- if hc.url:find('geauth') then
    -- hc.put_msg('ops')
-- local f=io.open(hc.get_cache_file_name(hc.url), 'rb')
-- hc.answer_body = f:read('*a')
-- f:close()
        -- hc.answer_header = 'HTTP/1.1 200 OK\r\nContent-Type: application/octet-stream\r\nExpires: 0\r\n' ..
-- 'Cache-Control: no-cache,no-store\r\nSet-Cookie: PREF=ID=04c59454d2abb6b7:TM=1243710370:LM=1243710370:S=YdBzseUhw6Z4z3xu; ' ..
-- 'expires=Mon, 30-May-2011 19:06:10 GMT; path=/; domain=.google.com\r\nDate: Sat, 30 May 2009 19:06:10 GMT\r\nServer: btfe\r\n' ..
-- 'Content-Length: ' .. #hc.answer_body .. '\r\nConnection: Close\r\n\r\n'
        -- return
    -- end

    local URLTail = re.replace(hc.url, [[(^http://kh(mdb)?\.google\.com/flatfile\?(db=\w+&)?+)([^&]+)(.*)]], [[\4]])
    URLBase = re.replace(hc.url, nil, [[\1===\5]])
    -- если запрошенный файл не составной, то не обновляем его
    -- hc.put_to_log('+++++++++++++ ', URLTail, ' +++++++++++')
    if not URLTail:find('+', 1, true) then
        hc.action = 'dont_update'
        hc.monitor_string = 'GE: загружен'
        return
    end

    -- все остальное только для составных запрошенных файлов. В кэше их не сохраняем,
    -- разбиваем на простые, каждый из которых сохраняем в кэш
    hc.action = 'dont_save'
    GE = {}
    i = 0                      -- число подфайлов в запрашиваемом файле
    GE.not_in_cache_count = 0  -- число подфайлов, отсутствующих в кэше

    -- для каждого подфайла сохраним его url и признак наличия в кэше
    local not_cached_url = ''
    for file in URLTail:gmatch('[^+]+') do
        i = i+1
        GE[i] = {url=file}
        GE[i].fname, GE[i].in_cache = hc.get_cache_file_name(OriginURL(file))
        if GE[i].in_cache then
            local cf = io.open(GE[i].fname, 'rb')
            if cf then
                GE[i].body = cf:read('*a')
                cf:close()
                hc.put_to_log('GE: Прочли из кэша файл ', GE[i].fname)
            else
                hc.put_to_log('GE: Не удалось прочесть из кэша файл ', GE[i].fname)
                hc.put_msg('GE: Не удалось прочесть из кэша файл ', GE[i].fname)
            end
        else
            GE.not_in_cache_count = GE.not_in_cache_count + 1
            not_cached_url = not_cached_url .. '+' .. file
        end
    end

    -- если все куски запрашиваемого файла есть в кэше, то собираем его и отдаем
    if GE.not_in_cache_count==0 then
        local header = '\1' .. string.char(i)  -- создаем начало заголовка собираемого файла
        local body = ''                        -- здесь накапливаем тело собираемого файла
        local j = 1
        repeat
            local cf = io.open(GE[j].fname, 'rb')
            if cf then
                header = header .. IntToChars(2+4*i+#body)  -- дописываем смещение j-го подфайла в заголовок
                body = body .. cf:read('*a')     -- дописываем тело j-го подфайла к собираемому файлу
                cf:close()
                j = j + 1
            end
        until j>i
        hc.answer_body = header .. body
        hc.answer_header = 'HTTP/1.0 200 OK\r\nContent-Type: application/octet-stream\r\nServer: btfe\r\nContent-Length: '
            .. #hc.answer_body .. '\r\nConnection: Close\r\n\r\n'
        hc.monitor_string = 'GE: составной, всё из кэша'

    else
        GE.body = ''
        GE.files_count = i
        -- формируем новый URL, куда войдут только отсутствующие в кэше части
        not_cached_url = not_cached_url:gsub('+', '', 1)
        --  и исправляем соответственно заголовок запроса к серверу
        if not_cached_url:find('+', 1, true) then
            hc.request_header = re.replace(hc.request_header, [[.*?\?(db=\w+&)?+\K[^&\s]+]], not_cached_url)
        else
            hc.request_header = re.replace(hc.request_header, [[.*?\?(db=\w+&)?+\K\S+]], not_cached_url)
        end
        hc.call_me_for('BeforeAnswerBodySend', 'body')
    end
end

-- ********** О Б Р А Б О Т К А   Т Е Л А   О Т В Е Т А **********

function body()
    GE.body = GE.body .. hc.answer_body        -- тело полученного из интернет ответа
    local body = ''                -- здесь накапливаем итоговое тело ответа
    if not hc.last_part then
        hc.answer_body = ''
        return
    end
    local i = GE.files_count
    local k = 0
    local header = '\1' .. string.char(i)  -- создаем начало заголовка собираемого файла
    for j=1,i do
   header = header .. IntToChars(2+4*i+#body)  -- дописываем смещение j-го подфайла в заголовок
        if GE[j].in_cache then
            body = body .. GE[j].body
        else
            local bb
            if GE.not_in_cache_count==1 then
                bb = GE.body
            else
                k = k + 1
                bb = GE.body:sub(CharsToInt(GE.body:sub(k*4-1,k*4+2))+1,
                    k<GE.not_in_cache_count and CharsToInt(GE.body:sub(3+k*4,3+(k+1)*4-1)) or -1)
            end
            hc.prepare_path(GE[j].fname)
            local ff = io.open(GE[j].fname, 'wb')
            if ff then
                ff:write(bb)   -- пишем j-й подфайл в кэш
                ff:close()
                hc.put_to_log('GE: Записали в кэш файл ', GE[j].fname)
            -- удалим из RAM-кэша и текущего потока возможную информацию о том, что j-го подфайла в кэше нет
                hc.update_url_info(OriginURL(GE[j].url))
            end
            body = body .. bb
        end
    end
    hc.answer_body = header .. body
    hc.monitor_string = (GE.not_in_cache_count<i) and 'GE: составной, из сети и кэша' or 'GE: составной, загружен полностью'
end
Изменения:
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
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Expires: 0
Cache-Control: no-cache,no-store
Set-Cookie: PREF=ID=f55b6a75f4d129bc:TM=1245216523:LM=1245216523:S=RDN8rR2r9oCmV4uw; expires=Fri, 17-Jun-2011 05:28:43 GMT; path=/; domain=.google.com
Date: Wed, 17 Jun 2009 05:28:43 GMT
Server: btfe
Content-Length: 112
Connection: keep-alive


17.06.09 12:26:47,448 # 2032/4718 >>> URL: http://mw2.google.com/mw-earth-vectordb/gallery_layers/icons/places.png
noReqDo:
GET http://mw2.google.com/mw-earth-vectordb/gallery_layers/icons/places.png HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
If-Modified-Since: Mon, 15 Jun 2009 07:47:18 GMT
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: mw2.google.com
Connection: Keep-Alive


17.06.09 12:26:47,558 # 2032/4718 <<< URL: http://mw2.google.com/mw-earth-vectordb/gallery_layers/icons/places.png
HTTP/1.1 304 Not Modified (HC)
Server: HandyCache/1.00 RC2 (1.0.0.180) UNSTABLE
Content-Length: 0
Connection: Keep-alive


17.06.09 12:26:51,026 # 2031: DNS resolve
GET http --> Err 123

17.06.09 12:26:51,136 # 2031 <<< URL:
GET http://kh.google.com/flatfile?
GET http://kh.google.com/flatfile?q2-03103132-q.203+q2-03103123-q.203+f1c-03100332-d.5378.200&v=1&v=1
Connection to
GET http:80

17.06.09 12:26:51,276 # 2032: DNS resolve kh.google.com --> 72.14.203.190 (From cache)

17.06.09 12:26:51,401 # 2032 <<< URL: http://kh.google.com/flatfile?q2-03103003-q.203
Connection to 72.14.203.190:80

17.06.09 12:26:51,604 # 2032:  Outbound Connection, Local port: 4660

17.06.09 12:26:51,698 # 2032/4720 >>> URL: http://kh.google.com/flatfile?q2-03103003-q.203
GET /flatfile?q2-03103003-q.203 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=XxJsOgADEAEADwAwbMslVKwmKBmGHjrI8htaFm/fQHQ/Ix9jIouSdX/ubvoRh4OWub/txDJH2shfI3N2; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


17.06.09 12:26:51,808 # 2032 <<< URL: http://kh.google.com/flatfile?q2-03103003-q.203
HTTP/1.1 200 OK
Date: Wed, 17 Jun 2009 05:28:48 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, must-revalidate
Content-Type: application/octet-stream
Server: btfe
Content-Length: 456
Connection: keep-alive


Название: 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, куда войдут только отсутствующие в кэше части
       not_cached_url = OriginURL(not_cached_url:gsub('+', '', 1)):gsub('.-%?', '', 1)
      --  и исправляем соответственно заголовок запроса к серверу
       hc.request_header = re.replace(hc.request_header, [[.*?\?\K\S+]], not_cached_url, false)


Название: 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. Поясни, плиз, в чем заключаются "общеизвестные грабли".
"Общеизвестные грабли" заключаются в том, что при работе с ГЕ необходимо обязательное указание состояния Connection:. Нативно это Keep-Alive, если неохота ждать - то Close. В противном случае получаем kill коннектов лишь по дефолтовому таймауту, который много больше нативных 10 секунд и приводит к неоправданным тормозам c постоянным ожиданиям ГЕ на свободный коннект, особенно на фоне "быстрого соединения" (HC+кэш) - где сам Кришна велел их принудительно и очень шустренько закрывать после окончания передачи контента, чтобы не держать очередь постоянно забитой.

С таким ответом трудно что-то поправить... С моими настройками НС проблем нет.
Хм. А как минимум в этой теме присутствуют двое юзеров с одинаковой проблемой для обоих, а всё запрошенное от одного юзера - было уже дано им же много ранее. :) Ждем результатов пробования подредактированного скрипта вторым юзером, если всё ОК - то и чох яхши.

Проблема же с вылазящим GET - остается. Сейчас буду тестить согласно ранеепосоветованного. Отпишусь.


Название: Re: HandyCache + GE.lua (кэширование GoogleEarth)
Отправлено: Parasite от 18 июня 2009, 08:56:30
   >Можно даже для отладки вставить такую строку в двух местах: до изменения заголовка и после,
   >тогда будет видно, портит его расширение или же такой заголовок приходит от Google Earth.

Докладаюсь. Сделал так:
Код:
        --  и исправляем соответственно заголовок запроса к серверу
        if not_cached_url:find('+', 1, true) then
            hc.put_to_log('Заголовок из GE:', hc.request_header, '.')
            hc.request_header = re.replace(hc.request_header, [[.*?\?(db=\w+&)?+\K[^&\s]+]], not_cached_url)
            hc.put_to_log('Заголовок из GE:', hc.request_header, '.')
        else
            hc.put_to_log('Заголовок из GE:', hc.request_header, '.')
            hc.request_header = re.replace(hc.request_header, [[.*?\?(db=\w+&)?+\K\S+]], not_cached_url)
            hc.put_to_log('Заголовок из GE:', hc.request_header, '.')
        end

дождался глюка с 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

18.06.09 11:19:50,839 # 104: DNS resolve kh.google.com --> 72.14.203.93 (From cache)

18.06.09 11:19:50,901 # 104/180 >>> URL: http://kh.google.com/geauth
POST /geauth HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Content-Type: application/octet-stream
Cache-Control: no-store
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Content-Length: 49
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:19:50,964 # 104 <<< URL: http://kh.google.com/geauth
Connection to 72.14.203.93:80

18.06.09 11:19:51,167 # 104:  Outbound Connection, Local port: 1735

18.06.09 11:19:51,214 # 104 <<< URL: http://kh.google.com/geauth
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Expires: 0
Cache-Control: no-cache,no-store
Set-Cookie: PREF=ID=28534345e7220b8f:TM=1245298907:LM=1245298907:S=qaZkKm8pZYF2sHpe; expires=Sat, 18-Jun-2011 04:21:47 GMT; path=/; domain=.google.com
Date: Thu, 18 Jun 2009 04:21:47 GMT
Server: btfe
Content-Length: 136
Connection: keep-alive


18.06.09 11:19:53,964 # 104: DNS resolve
GET http --> Err 123

18.06.09 11:19:54,026 # 104 <<< URL:
GET http://kh.google.com/flatfile?f1-02103210-i.196
Connection to
GET http:80

18.06.09 11:19:54,761 # 105: Connection from local/127.0.0.1:1737 to HC Version 1.00 RC2 (1.0.0.180) UNSTABLE

18.06.09 11:19:54,808 # 105 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
GE: Прочли из кэша файл D:\HandyCache\Cache\_GE_TILES_CACHE_\Earth\Bitmaps\196\z8\f1-02103212-i.196

18.06.09 11:19:54,870 # 105 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
Заголовок из GE:GET http://kh.google.com/flatfile?f1-02103211-i.196+f1-02103212-i.196&v=1 HTTP/1.0
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=CIDr1gADEAEADwA4mjeagZUIrkZMf5E15l9kr5vRK/jbjA7INMksDguIpfr8UKCyapAIKSJYTw2nBHuQn5aZqPI1GTc=; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Proxy-Connection: Keep-Alive
Pragma: no-cache

.

18.06.09 11:19:54,917 # 105 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
Заголовок из GE:GET http://kh.google.com/flatfile?f1-02103211-i.196 HTTP/1.0
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=CIDr1gADEAEADwA4mjeagZUIrkZMf5E15l9kr5vRK/jbjA7INMksDguIpfr8UKCyapAIKSJYTw2nBHuQn5aZqPI1GTc=; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Proxy-Connection: Keep-Alive
Pragma: no-cache

.

18.06.09 11:19:54,995 # 105: DNS resolve kh.google.com --> 72.14.203.93 (From cache)

18.06.09 11:19:55,073 # 105/182 >>> URL: http://kh.google.com/flatfile?f1-02103211-i.196
GET /flatfile?f1-02103211-i.196 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=CIDr1gADEAEADwA4mjeagZUIrkZMf5E15l9kr5vRK/jbjA7INMksDguIpfr8UKCyapAIKSJYTw2nBHuQn5aZqPI1GTc=; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:19:55,136 # 105 <<< URL: http://kh.google.com/flatfile?f1-02103211-i.196
Connection to 72.14.203.93:80

18.06.09 11:19:55,261 # 106: Connection from local/127.0.0.1:1745 to HC Version 1.00 RC2 (1.0.0.180) UNSTABLE

18.06.09 11:19:55,683 # 106: DNS resolve kh.google.com --> 72.14.203.93 (From cache)

18.06.09 11:19:55,761 # 106/183 >>> URL: http://kh.google.com/flatfile?f1-02103213-i.196
GET /flatfile?f1-02103213-i.196 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=CIDr1gADEAEADwA4mjeagZUIrkZMf5E15l9kr5vRK/jbjA7INMksDguIpfr8UKCyapAIKSJYTw2nBHuQn5aZqPI1GTc=; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:19:55,854 # 106 <<< URL: http://kh.google.com/flatfile?f1-02103213-i.196
Connection to 72.14.203.93:80

18.06.09 11:19:55,901 # 105:  Outbound Connection, Local port: 1748

18.06.09 11:19:55,964 # 106:  Outbound Connection, Local port: 1749

18.06.09 11:19:56,089 # 105 <<< URL: http://kh.google.com/flatfile?f1-02103211-i.196
HTTP/1.1 200 OK
Date: Thu, 18 Jun 2009 04:21:51 GMT
Expires: Fri, 19 Jun 2009 04:21:51 GMT
Cache-Control: public, max-age=86400
Content-Type: application/octet-stream
Server: btfe
Content-Length: 14444
Connection: keep-alive


18.06.09 11:19:56,136 # 106 <<< URL: http://kh.google.com/flatfile?f1-02103213-i.196
HTTP/1.1 200 OK
Date: Thu, 18 Jun 2009 04:21:51 GMT
Expires: Fri, 19 Jun 2009 04:21:51 GMT
Cache-Control: public, max-age=86400
Content-Type: application/octet-stream
Server: btfe
Content-Length: 15372
Connection: keep-alive


18.06.09 11:19:56,198 # 105 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
GE: Записали в кэш файл D:\HandyCache\Cache\_GE_TILES_CACHE_\Earth\Bitmaps\196\z8\f1-02103211-i.196

18.06.09 11:19:56,245 # 105:  Outbound Disconnection

18.06.09 11:19:56,292 # 105:  Client Disconnection

18.06.09 11:19:56,948 # 104 <<< URL:
GET http://kh.google.com/flatfile?f1-02103210-i.196
Sleep(ConnectRepeatPause)

18.06.09 11:19:57,151 # 106 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
GE: Прочли из кэша файл D:\HandyCache\Cache\_GE_TILES_CACHE_\Earth\Layers\7319\191\z6\f1c-021020-d.7319.191

18.06.09 11:19:57,229 # 106 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
Заголовок из GE:GET http://kh.google.com/flatfile?f1-02103311-i.179+f1-02103312-i.179+f1c-021020-d.7319.191&v=1 HTTP/1.0
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=CIDr1gADEAEADwA4mjeagZUIrkZMf5E15l9kr5vRK/jbjA7INMksDguIpfr8UKCyapAIKSJYTw2nBHuQn5aZqPI1GTc=; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Proxy-Connection: Keep-Alive
Pragma: no-cache

.

18.06.09 11:19:57,339 # 106 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
Заголовок из GE:GET http://kh.google.com/flatfile?f1-02103311-i.179+f1-02103312-i.179&v=1 HTTP/1.0
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=CIDr1gADEAEADwA4mjeagZUIrkZMf5E15l9kr5vRK/jbjA7INMksDguIpfr8UKCyapAIKSJYTw2nBHuQn5aZqPI1GTc=; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Proxy-Connection: Keep-Alive
Pragma: no-cache

.

18.06.09 11:19:57,464 # 106: DNS resolve kh.google.com --> 72.14.203.93 (From cache)

18.06.09 11:19:57,526 # 106/184 >>> URL: http://kh.google.com/flatfile?f1-02103311-i.179+f1-02103312-i.179&v=1
GET /flatfile?f1-02103311-i.179+f1-02103312-i.179&v=1 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=CIDr1gADEAEADwA4mjeagZUIrkZMf5E15l9kr5vRK/jbjA7INMksDguIpfr8UKCyapAIKSJYTw2nBHuQn5aZqPI1GTc=; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:19:57,729 # 106 <<< URL: http://kh.google.com/flatfile?f1-02103311-i.179+f1-02103312-i.179&v=1
HTTP/1.1 200 OK
Date: Thu, 18 Jun 2009 04:21:53 GMT
Expires: Fri, 19 Jun 2009 04:21:53 GMT
Cache-Control: public, max-age=86400
Content-Type: application/octet-stream
Server: btfe
Content-Length: 35646
Connection: keep-alive


18.06.09 11:19:57,776 # 106 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
GE: Записали в кэш файл D:\HandyCache\Cache\_GE_TILES_CACHE_\Earth\Bitmaps\179\z8\f1-02103311-i.179

18.06.09 11:19:57,854 # 106 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
GE: Записали в кэш файл D:\HandyCache\Cache\_GE_TILES_CACHE_\Earth\Bitmaps\179\z8\f1-02103312-i.179

18.06.09 11:19:57,933 # 106:  Outbound Disconnection

18.06.09 11:19:57,979 # 106:  Client Disconnection

18.06.09 11:19:59,792 # 107: Connection from local/127.0.0.1:1752 to HC Version 1.00 RC2 (1.0.0.180) UNSTABLE

18.06.09 11:19:59,839 # 107 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
GE: Прочли из кэша файл D:\HandyCache\Cache\_GE_TILES_CACHE_\Earth\Layers\7326\195\z6\f1c-021020-d.7326.195

18.06.09 11:19:59,901 # 107 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\GE.lua
GE: Прочли из кэша файл D:\HandyCache\Cache\_GE_TILES_CACHE_\Earth\Layers\7337\195\z6\f1c-021020-d.7337.195

18.06.09 11:19:59,964 # 107 <<< URL: http://kh.google.com/flatfile?f1c-021020-d.7326.195+f1c-021020-d.7337.195&v=1
GET http://kh.google.com/flatfile?f1c-021020-d.7326.195+f1c-021020-d.7337.195&v=1 HTTP/1.0
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=kEbz/gADEAEAAQBAYi1ZPu51Jon90bQbCrrPI7tEOzE1i9XApKrKq28qYv9q+Drc60YUPnCyX8CdmHlsCX41wQbm3iZdbuht1r7PDQ==; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Proxy-Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:20:00,042 # 107 <<< URL: http://kh.google.com/flatfile?f1c-021020-d.7326.195+f1c-021020-d.7337.195&v=1
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Server: btfe
Content-Length: 293
Connection: Close


18.06.09 11:20:00,089 # 107 <<< URL: http://kh.google.com/flatfile?f1c-021020-d.7326.195+f1c-021020-d.7337.195&v=1
Connection.Connected=False

18.06.09 11:20:00,136 # 107:  Client Disconnection

18.06.09 11:20:00,214 # 108: Connection from local/127.0.0.1:1754 to HC Version 1.00 RC2 (1.0.0.180) UNSTABLE

18.06.09 11:20:00,276 # 108/186 >>> URL: http://kh.google.com/flatfile?f1c-021020-d.7393.189
noReqDo:
GET http://kh.google.com/flatfile?f1c-021020-d.7393.189 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=kEbz/gADEAEAAQBAYi1ZPu51Jon90bQbCrrPI7tEOzE1i9XApKrKq28qYv9q+Drc60YUPnCyX8CdmHlsCX41wQbm3iZdbuht1r7PDQ==; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:20:00,354 # 108 <<< URL: http://kh.google.com/flatfile?f1c-021020-d.7393.189
HTTP/1.1 200 OK
Server: HandyCache/1.00 RC2 (1.0.0.180) UNSTABLE
Content-Length: 565
Connection: Keep-alive
Last-Modified: Mon, 15 Jun 2009 07:59:16 GMT


18.06.09 11:20:00,417 # 109: Connection from local/127.0.0.1:1756 to HC Version 1.00 RC2 (1.0.0.180) UNSTABLE

18.06.09 11:20:00,464 # 108/187 >>> URL: http://kh.google.com/flatfile?f1c-021020-d.7402.195
noReqDo:
GET http://kh.google.com/flatfile?f1c-021020-d.7402.195 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=kEbz/gADEAEAAQBAYi1ZPu51Jon90bQbCrrPI7tEOzE1i9XApKrKq28qYv9q+Drc60YUPnCyX8CdmHlsCX41wQbm3iZdbuht1r7PDQ==; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:20:00,511 # 108 <<< URL: http://kh.google.com/flatfile?f1c-021020-d.7402.195
HTTP/1.1 200 OK
Server: HandyCache/1.00 RC2 (1.0.0.180) UNSTABLE
Content-Length: 163
Connection: Keep-alive
Last-Modified: Mon, 15 Jun 2009 09:10:46 GMT


18.06.09 11:20:00,589 # 109/188 >>> URL: http://kh.google.com/flatfile?f1c-021020-d.7395.191
noReqDo:
GET http://kh.google.com/flatfile?f1c-021020-d.7395.191 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=kEbz/gADEAEAAQBAYi1ZPu51Jon90bQbCrrPI7tEOzE1i9XApKrKq28qYv9q+Drc60YUPnCyX8CdmHlsCX41wQbm3iZdbuht1r7PDQ==; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:20:00,651 # 109 <<< URL: http://kh.google.com/flatfile?f1c-021020-d.7395.191
HTTP/1.1 200 OK
Server: HandyCache/1.00 RC2 (1.0.0.180) UNSTABLE
Content-Length: 4983
Connection: Keep-alive
Last-Modified: Mon, 15 Jun 2009 14:08:02 GMT


18.06.09 11:20:00,698 # 108/189 >>> URL: http://kh.google.com/flatfile?lf-0-icons/capital32_nh.png
noReqDo:
GET http://kh.google.com/flatfile?lf-0-icons/capital32_nh.png HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cookie: $Version="0"; SessionId=kEbz/gADEAEAAQBAYi1ZPu51Jon90bQbCrrPI7tEOzE1i9XApKrKq28qYv9q+Drc60YUPnCyX8CdmHlsCX41wQbm3iZdbuht1r7PDQ==
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive


18.06.09 11:20:00,745 # 109/190 >>> URL: http://kh.google.com/flatfile?f1c-0201221-t.201
noReqDo:
GET http://kh.google.com/flatfile?f1c-0201221-t.201 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=kEbz/gADEAEAAQBAYi1ZPu51Jon90bQbCrrPI7tEOzE1i9XApKrKq28qYv9q+Drc60YUPnCyX8CdmHlsCX41wQbm3iZdbuht1r7PDQ==; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:20:00,792 # 108 <<< URL: http://kh.google.com/flatfile?lf-0-icons/capital32_nh.png
HTTP/1.1 200 OK
Server: HandyCache/1.00 RC2 (1.0.0.180) UNSTABLE
Content-Length: 1577
Connection: Keep-alive
Last-Modified: Mon, 15 Jun 2009 07:59:16 GMT
Content-Type: image/png


18.06.09 11:20:00,854 # 109 <<< URL: http://kh.google.com/flatfile?f1c-0201221-t.201
HTTP/1.1 200 OK
Server: HandyCache/1.00 RC2 (1.0.0.180) UNSTABLE
Content-Length: 963
Connection: Keep-alive
Last-Modified: Mon, 15 Jun 2009 14:05:00 GMT


18.06.09 11:20:00,901 # 108/191 >>> URL: http://kh.google.com/flatfile?f1c-0201222-t.201
noReqDo:
GET http://kh.google.com/flatfile?f1c-0201222-t.201 HTTP/1.1
Accept: text/plain, text/html, text/xml, text/xml-external-parsed-entity, application/octet-stream, application/vnd.google-earth.kml+xml, application/vnd.google-earth.kmz, image/*
Cache-Control: no-cache, no-store
Cookie: $Version="0"; SessionId=kEbz/gADEAEAAQBAYi1ZPu51Jon90bQbCrrPI7tEOzE1i9XApKrKq28qYv9q+Drc60YUPnCyX8CdmHlsCX41wQbm3iZdbuht1r7PDQ==; State=1
User-Agent: GoogleEarth/4.2.0205.5730(Windows;Microsoft Windows XP (Service Pack 1);ru-RU;kml:2.2;client:Free;type:default)
Host: kh.google.com
Connection: Keep-Alive
Pragma: no-cache


18.06.09 11:20:00,948 # 108 <<< URL: http://kh.google.com/flatfile?f1c-0201222-t.201
HTTP/1.1 200 OK
Server: HandyCache/1.00 RC2 (1.0.0.180) UNSTABLE
Content-Length: 958
Connection: Keep-alive
Last-Modified: Mon, 15 Jun 2009 14:05:02 GMT


18.06.09 11:20:01,401 # 104 <<< URL:
GET http://kh.google.com/flatfile?f1-02103210-i.196
Connection to
GET http:80

18.06.09 11:20:04,651 # 104:  Outbound Connection failed

18.06.09 11:20:06,073 # 104 <<< URL:
GET http://kh.google.com/flatfile?f1-02103210-i.196
HTTP/1.1 503 Service Unavailable (HC)
Server: HandyCache/1.00 RC2 (1.0.0.180) UNSTABLE
Content-Type: text/html
Content-Length: 240
Connection: Keep-alive


18.06.09 11:20:06,136 # 104 <<< URL:
GET http://kh.google.com/flatfile?f1-02103210-i.196
Connection.Connected=False

18.06.09 11:20:06,183 # 104
OutboundClient not Connected

18.06.09 11:20:06,245 # 104:  Client Disconnection

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.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, '.')
пользоваться неудобно, строки слипаются и теряются в логе!
Дак множественные ==== - приводят к еррорам при загрузке скрипта в HC. Пробовал еще с предыдущего раза. На пустом месте не стал бы править просто так, зачем оно мне.....
Поудалял === - ерроры пропали, начало грузиться. Без этих знаков можно как-нибудь обойтись?

Вот скрипт в аттаче (какой он был на момент написания предыдущего поста - вышеуказанное пока еще не вносил).

Отладку - включу, новый лог - сделаю. Отпишусь.


Название: 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

[/color]Отлавливай URL, начинающийся с GET, с этим надо разобраться.
Как конкретно мне его отловить? Он вылазит в произвольных местах, через произвольное время и на произвольных УРЛах (например, в примере выше он вылез просто на прямом УРЛе http://mw2.google.com/mw-earth-vectordb/places/dynamic_places/ru/013323.kmz, который даже и скриптом-то не должен отрабатываться по идее).

Вылазит в 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
Может, такое происходит из-за предыдущего POST-запроса в этом же соединении?
Возможно, HC неправильно отпределил границы предыдущего POST-запроса и нового GET-запроса?
Кстати, да. Частенько такой GET вылазит, когда ГЕ уже все прогрузил и остановился со скачками, и простоял больше 5и минут. Следующее движение в ГЕ по карте - он тут же перезапрашивает авторизацию (тот самый 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('Content-Type: application/octet-stream');
header('Expires: 0');
header('Cache-Control: no-cache,no-store');
header('Set-Cookie: PREF=ID=ce13d9b0466f4e82:TM=1240495121:LM=1240495121:S=PaQRO6QQesvvAwz5; expires=Sat, 23-Apr-2011 13:58:41 GMT; path=/; domain=.google.com');
header('Date: '.date("D, d M Y G:i:s").' GMT');
header('Server: btfe');
header('Content-Length:'.strlen($content));
header('Connection: Keep-Alive');
header('Keep-Alive: 300');
header('');

, где для клиента обязательными для рассмотрения являются поля

Код:
	header('HTTP/1.0 200 OK');
header('Content-Type: application/octet-stream');
header('Content-Length:'.strlen($content));
header('Connection: Keep-Alive');
header('');

Другой вопрос, что коннекты в некоторых случаях могут закрываться принудительно - например гейтом или проксиком, и тогда скрипту заботиться об этом действительно нет нужды. Но это не мой случай.

Если скрипт будет отдавать 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);
...<skip>...
$out .= "Content-Length: ".strlen($data)."\r\n";
$out .= "Connection: Close\r\n";
$out .= "\r\n";
fwrite($fp, $out);
...и это тоже прекрасно работает so far. :)

Можем ли мы перейти к обсуждению пунктика сортировки контента средствами самого скрипта? Спасибо.

Где-то раньше я проводил замеры времени с использованием 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, проверь это, плиз, в своих сложных условиях.
Нет, все проблемы в скрипте. Как только обновил скрипт всё заработало. У меня проблем с GET в url небыло, да и версии новой у меня нет. Работает на HC 180.


Название: 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
-- hc.put_msg('ops')
-- local f=io.open(hc.get_cache_file_name(hc.url), 'rb')
-- hc.answer_body = f:read('*a')
-- f:close()
-- hc.answer_header = 'HTTP/1.1 200 OK\r\nContent-Type: application/octet-stream\r\nExpires: 0\r\n' ..
-- 'Cache-Control: no-cache,no-store\r\nSet-Cookie: PREF=ID=04c59454d2abb6b7:TM=1243710370:LM=1243710370:S=YdBzseUhw6Z4z3xu; ' ..
-- 'expires=Mon, 30-May-2011 19:06:10 GMT; path=/; domain=.google.com\r\nDate: Sat, 30 May 2009 19:06:10 GMT\r\nServer: btfe\r\n' ..
-- 'Content-Length: ' .. #hc.answer_body .. '\r\n\r\n'
-- return
-- end
Попытка закэшировать авторизацию? Обратите внимание на GoogleEarth.Local (http://sasgis.ru/forum/viewtopic.php?f=3&t=281) (выдаёт запрос на kh.hoogle.com) - ему можно скормить в том числе и авторизацию, и он будет работать "чисто локально". А с обычным клиентом такого не провернёшь;)

И почему-то опять, в скрипте, проигнорирована строчка 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. Если так, то надо включить. Из скрипта я этим параметром управлять не могу.
Да, включение опции no-cache избавило от "глюка". Надо бы в шапку скрипта этот нюанс добавить.

Цитировать
Цитировать
Уже ж вроде всё обсудили и обошли эти грабли?
Граблей нет. Если клинит, давай посмотрим подробней...
А что собственно смотреть? Единственная модификация скрипта (Connection:Close) - и гугл не ждёт по 30 сек после каждого запроса "из кэша"


Название: 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
+  Лог ошибок (файл GE.log). Если он появится в папке со скриптом, подскажите мне, плиз
*  Учитывается состояние опции НС "Разрешить чтение из кэша"
*  Изменен текст сообщений в колонке "Правила" монитора
-  Слегка улучшено использование памяти
Скрипт в его чистом виде - опять вешает клиента. Править ручками на тему Connection:Close (и тогда ОК). :rtfm:

Версия 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 работает эффективней.
Ага, а в шапку скрипту инфу о том, как сделать его наиболее эффективным ;)
Цитировать
У кого-нибудь есть идеи?
Скриптом такое проделать можно. А в чем замысел?
Замысел в том, чтобы не затирался dbRoot, хотелось бы, знаете ли, оставить его "на память", авось когда и пригодится. Коллекция дбрутов будет доступна тут. (http://wiki.googis.info/Обновления_данных_на_GoogleEarth)
А можно скриптом добавлять к имени номер не по порядку, а тот, что записан в седьмом байте файла? И не плохо бы, рядом со вновь скачанным дбрутом ложить текстовичёк с датой из заголовка 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 и по логике этой версии протокола бремя закрытия соединения оставляет серверу (HC).
Я читал в стандарте, что если http 1.0 клиент опускает в заголовке поле Connection, то клиент рассматривает соединение как Непостоянное. Но я нигде не читал, что СЕРВЕР отвечая http 1.0  клиенту может опустить в ответе поле Connection и это будет равносильно наличию Connection: close. Если я это упустил, дай цитату. Я же вижу вот, что
Цитировать
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
   the connection be established by the client prior to each request and
   closed by the server after sending the response.
Видимо, этой логики придерживается Гугл, выступая в роли клиента http 1.0 при отсутствии в ответе заголовка Connection.


Название: 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 ничего не значит.
Дело в том, что ГЕ - клиент 1.1 (коль скоро просит этого), но в его ПОЛНОЙ поддержке 1.1 (как и 1.0) лично я сильно сомневаюсь. Ему это просто не нужно - это попсовая программка,  изначально предназначенная для работы с ОДНИМ конкретно взятым своим сервером, и рамки "стандарта" оговариваются только фактом "работает\не работает именно эта связка". Какую-то меру совместимости ГЕ поддерживает сугубо для беспрепятственного прохождения своего трафика по всем хопам, и имхо не более того.
Лично я бы не ждал от него идеального соответствия 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
Цитировать
ну когда же, КОГДА появится желаемая возможность сортировки скриптом по папкам кэша?
Такая версия уже тестируется, доработаю описание и дам тебе потестировать. А ты сам попробуешь скрипт написать?
Господа, помогите пожалуйста перевести  следующий алгоритм в LUA? Что-то у меня сложно всё с ним... :(

Код:
function GENameStringToXY(NAME:string;Level:byte):TPoint;
var i:byte;
begin
     // переменная NAME - строка с цифро-именем: NAME='01230123'
     // Level - зум - длина строки NAME

     result.X:=0;  // инициализация X,Y и если Level=1 то и
     result.Y:=0;  // ответ функции

     for i:=2 to Level do // цикл от 2 до Level
     begin
          result.X:=result.X*2; // ответ увеличиваем в 2 раза
          result.Y:=result.Y*2;

          case NAME[i] of
          '0': inc(result.Y); // к Y прибавляем 1 если символ '0'

          '1': begin // если символ '1' и к X и к Y прибавляем 1
                  inc(result.X);
                  inc(result.Y);
               end;

          '2': inc(result.X);

          end;
     end;
end;
Спасибо.


Название: 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
Никак не получается переназначить имя в кэше...

Код:
    -- если запрошенный файл не составной, то не обновляем его
    -- hc.put_to_log('+++++++++++++ ', URLTail, ' +++++++++++')
    if not URLTail:find('+', 1, true) then
        get_cache_name(URLtail)
        hc.action = 'dont_update'
        return
    end

............

function get_cache_name(URLtail)
local Base_Path= '1'
        hc.cache_file_name= Base_Path..'\\'..URLtail
        hc.monitor_string = 'Processed!'
end
...но при получении единичного файла - он кладется как всегда (во ./flatfile^/q2-030122322221-q.206 например, а не в ./1/q2-030122322221-q.206).
Что я не так делаю? :(


Название: 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()
    local s= hc.prepare_url(hc.url)

    local server= re.find(s, [[([^\\]+)\\?.*$]], 1)
    local domen= re.find(server, [[([^\.]*)\.[^\.]*$]], 1)
    local prefix=''
    if domen then prefix= domen:sub(1,1)..'\\' end

    hc.cache_file_name= prefix..s
    hc.monitor_string = hc.monitor_string.."Cache "
end
это таки должно работать даже при прямом указании нового статического пути ручками (насколько я понимаю из кода). Просьба ткнуть носом, где я неправ и почему у меня не получается? В чем заключается секрет окрытия hc.cache_file_name на запись, чего я не сделал в моем случае выше и у меня оно не работает?  :oops:


Название: 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()
if hc.url:find('+', 1, true) then
return
end
local url = re.replace(hc.url, [[http://kh(mdb)?\.google\.com/(flatfile|dbRoot\.v\d+)\?]], '_GE_/')
url = re.replace(url, [[_/\K(?!db=)]], 'Earth/')
url = re.replace(url, [[_/\Kdb=tm&]], 'History/')
url = re.replace(url, [[_/\Kdb=sky&]], 'Sky/')
url = re.replace(url, [[_/\Kdb=mars&]], 'Mars/')
url = re.replace(url, [[_/\lf-0-icons]], 'Icons/')
url = re.replace(url, [[_/\hl=(..|..-..)\&gl=..]], 'dbRoot.v5/dbRoot')
url = re.replace(url, [[/(?=f1-\d+-i\.(\d+))]], '/Images/\\1\\0')
url = re.replace(url, [[/(?=f1-\d+-d\.(\d+)\.(\d+))]], '/Textures/\\1/\\2/')
url = re.replace(url, [[/(?=f1c-\d+-t\.(\d+))]], '/Terrains/\\1\\0')
url = re.replace(url, [[/(?=f1c-\d+-d\.(\d+)\.(\d+))]], '/Layers/\\1/\\2/')
url = re.replace(url, [[/(?=q2-\d+-q\.(\d+))]], '/Queries/\\1\\0')
local digits = re.find(url, [[/\w+-(\d+)-]], 1)
if digits then
NameToXY(digits)
local Xi=math.floor(X/1024)
local Yi=math.floor(Y/1024)
hc.monitor_string = 'GE: Z=' .. #digits .. ', X=' .. X .. ', Y=' .. Y .. ' (Xi=' .. Xi .. ',Yi=' .. Yi ..')'
url = re.replace(nil, nil, '/z' .. #digits .. '/' .. Xi .. '/x' .. X .. '/' .. Yi .. '\\0')
end
hc.cache_file_name = hc.prepare_url(url)
end

function NameToXY(digits)
     -- переменная digits - строка с цифро-именем: digits='01230123'

local level = #digits -- переменная level - число знаков в digits
X = 0  -- инициализация X,Y и если Level=1 то и
Y = 0  -- ответ функции
for i=2,level do -- цикл от 2 до Level
          X = X*2      -- ответ увеличиваем в 2 раза
          Y = Y*2
          local ch = digits: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

Вопросы:
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')
   ff:seek('set', offset)
   value = string.byte(ff:read(1))
   ff:close()
В value искомый байт.


Название: Re: HandyCache + GE.lua (кэширование GoogleEarth)
Отправлено: Parasite от 16 июля 2009, 21:36:41
Можно попробовать так (смещение offset считаем от нуля, вместо 'c:\\tt.txt' пишем свой путь к файлу):
Цитировать
   local ff=io.open('c:\\tt.txt', 'rb')
В value искомый байт.
Спасибо. Уже сделал раскладку дбрутов, но есть маленькая, но последняя проблемка: io.open() работает только с абсолютными путями, насколько я понимаю? При указании абсолютного пути ручками в io.open - всё работает. Но это не очень красиво, хотелось бы полного автоматизма. Как мне получить абсолютный путь до файла в кэше в функции conv() Вашего скрипта? Это событие URLToFileNameConverting, в котором я к сожалению не могу читать hc.cache_file_name... Максимум, что добился - это нашел доступный hc.prepare_url(url), но это относительный путь уже в кэше, а не абсолютный - и его io.open() не жрет... :(

Также надо будет решить вопрос с двойными слэшами в абсолютном пути у Вас в примере в предыдущей мессаге, но с одиночными - в выходе hc.prepare_url(url).

Вот кусок кода. Помогите, пожалуйста.
Код:
	
        ...Ваш код...
        url = re.replace(url, [[_/\Kdb=sky&]], 'Sky/')
url = re.replace(url, [[_/\Kdb=mars&]], 'Mars/')

if url:find('hl=', 1, true) then    -- Обработка dbRoot
        url = re.replace(url, [[/hl=]], '/dbRoot.v5/hl=')

-- local source = hc.prepare_url(url)                                  <-- относительный путь '_GE_\dbroots.v5\hl=ru-RU&gl=ru'. Не работает!
local source='C:\\cache\\_GE_\\dbroots.v5\\hl=ru-RU&gl=ru'         <-- прописанный ручками абсолютный путь. Работает.

local file = io.open(source, 'rb')
file:seek('set', 5)
local value1 = string.byte(file:read(1))
file:seek('set', 6)
local value2 = string.byte(file:read(1))
file:close()
local version = 256*value1 + value2     -- версия дбрута

local destination = source .. "." .. version
local file = io.open(destination, 'rb')
if file then
file:close() -- проверяем на наличие в кэше, если есть - закругляемся
  hc.monitor_string = 'GE: dbRoot версии ' .. version .. ', есть в архиве'
else
local file1 = io.open(source, 'rb') -- копируем файл в архив
local data = file1:read("*all")
file1:close()
local file2 = io.open(destination, 'wb')
file2:write(data)
file2:close()
hc.monitor_string = 'GE: dbRoot версии ' .. version .. ', помещено в архив'
end
end

        url = re.replace(url, [[/lf-0-icons]], '/Icons')
url = re.replace(url, [[/(?=f1-\d+-i\.(\d+))]], '/Images/\\1\\0')
        ... итд далее Ваш код

Спасибо.


Название: 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
Цитировать
Так ведь отвечалось же уже...
Сорри, неправильно вопрос поставил. Изменил. Каков механизм применения накопленных дбрутов предыдущих версий? Этот механизм тоже надо делать в расширении?
Нет, слава Аллаху. 99.9% времени накопленные дбруты будут "просто лежать". :)
Они нужны в крайне немногочисленных ситуациях (но таки нужны), кои можно обработать и ручками по необходимости - переименовать один отдельно взятый файл ручками проще простого. Например, для ГЕ-трешки новые дбруты противопоказаны (еррорит и падает), но кое-какие задачи в ГЕ проще делать именно в трешке, для чего оную трешку нужно пустить - для чего и скормить ей дбрут, какой доктор прописал.

Цитировать
Разве не красивее иметь логику раскладки дбрутов именно там же, где и логику раскладки всего остального? Ведь вопрос-то всего-то в пути до файла, и всё заработает. Я бы хотел по возможности получить абс.путь до файла в кэше именно в рамках 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