+  HandyCache форум
|-+  Главная категория» Общие вопросы» Re: Скрипты Lua в HandyCache
Имя пользователя:
Пароль:
Страниц: [1] 2 3 ... 11   Вниз
  Отправить эту тему    Печать  
Автор Тема: Re: Скрипты Lua в HandyCache  (Прочитано 47870 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« : 04 января 2008, 12:27:22 »

Собственно вышла уже новая версия НС, а на форуме затишье по этому поводу. Я понимаю, что программеры и так все поймут, но может кто-нибудь снизойдет к обыкновенным юзерам и накропает пару примеров на Lua? Конкретно, интересует обработка заголовков рисунков для автоматической фильтрации баннеров по размерам. Возможно, есть и еще какие-то полезные методы, но больше ничего не приходит в голову.

С помощью скриптов в HC сейчас можно сделать, например, следующее:
- не обновлять картинки по типу в заголовке "Content-Type"
- не обновлять файлы "по размеру" (если размер файла в кэше совпадает с его размером на сервере)
- кэшировать/блокировать тела ответов "403" и "404" (подробности тут и тут)
- добавлять/удалять/править заголовки ответов сервера
и т.д.
« Последнее редактирование: 09 августа 2010, 20:19:48 от DenZzz » Сообщить модератору   Записан
Андрей
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #1 : 05 января 2008, 14:33:39 »

Полностью поддерживаю поднятие этой темы.
Необходимы именно шаблоны скриптов,так как  далеко не все знакомы с структурой языка программирования и серьёзная модификация приведённого first.lua затруднительна.
К примеру нужен шаблон на:
При обнаружении в Content-Type "image" добавление в конец url нужного расширения.
Сообщить модератору   Записан
The Alex
Новичок
*

Репутация: +1/-1
Offline Offline

Сообщений: 28


« Ответ #2 : 05 января 2008, 19:47:59 »

Тоже присоединяюсь!
 
Освоить RegExp, в объёме необходимом для настройки правил в HC, не так уж сложно. Почитав пару дней рекомендованную литературу, потом за несколько минут написал несколько своих правил - и всё работает. Дело в том, что есть куча примеров (теже дефолтные правила). Подставляй в тренажер, добавляй ссылки, изменяй, смотри на результат... Очень помогает!

Про Lua пока такого сказать могу. Это ж целый язык. За пару дней не выучишь. Неплохо бы написать и выложить какое-нить пособие для начинающих, с конкретными рабочими примерами. Еще лучше - готовые настроенные опробованные скрипты от гуру... Улыбка Шоб поставил в HC и усё работало! А там глядишь и желание появится научиться и самому что-нить сварганить...
« Последнее редактирование: 07 января 2008, 15:27:36 от DenZzz » Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #3 : 06 января 2008, 12:48:58 »

Цитировать
Неплохо бы написать и выложить какое-нить пособие для начинающих, с конкретными рабочими примерами. Еще лучше - готовые настроенные опробованные скрипты от гуру... Улыбка Шоб поставил в HC и усё работало!
Знаю, что у DenZzz есть кое-какие наработки на эту тему. Надеюсь он их опубликует, если будет на то его добрая воля.

Для обсуждения "HC Promoting" создал отдельную тему
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #4 : 07 января 2008, 15:24:48 »

Выкладываю свои скрипты:

  • save_or_block_403_and_404.lua - если ответ сервера 403 или 404 и это картинка, то HC сохранит ее в кэше, иначе заблокирует загрузку.
  • dont_update_image_by_type.lua - если файл уже есть в кэше и это картинка, то HC прервет загрузку с сервера и возьмет картинку из кэша. Это полезно, когда файлы картинок имеют нестандартные расширения и дефолтный список "Не обновлять" на них не срабатывает.
  • dont_update_file_by_size.lua - если размеры файлов в кэше и на сервере равны, то прервать загрузку с сервера и взять файл из кэша.
  • block_long_file.lua - аналогично действию опции "Не загружать большие файлы"


В lua.lst порядок следования у меня такой:
Цитировать
#.  <script=lua\save_or_block_403_and_404.lua>
#.  <script=lua\dont_update_image_by_type.lua>
#.  <script=lua\dont_update_file_by_size.lua>
#.  <script=lua\block_long_file.lua>

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

* Lua_scripts_from_DenZzz.zip (2.75 Кб - загружено 371 раз.)
« Последнее редактирование: 08 февраля 2008, 19:22:21 от DenZzz » Сообщить модератору   Записан
mzr
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 17


« Ответ #5 : 09 января 2008, 02:51:35 »

Не подскажете решение такой задачки?

Имеется форум, который периодически глючит. При этом его ответ выглядит вот так.
Код:
IPS Driver Error
There appears to be an error with the database.
You can try to refresh the page by clicking here

Если нажимать на "обновить" достаточно долго, есть шанс увидеть и нормальную страничку.

Вот лог ответа при ошибке
Код:
09.01.08 01:50:28,468 # 1679 <<< URL: http://10.253.0.39/forums/index.php?showforum=13
HTTP/1.1 200 OK
Date: Tue, 08 Jan 2008 22:48:34 GMT
Server: Apache/2.0.61 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=win-1251
Content-Length: 378


А вот пример лога при загрузке нормальной страницы
Код:
09.01.08 01:44:55,109 # 1660 <<< URL: http://10.253.0.39/forums/index.php?showtopic=11020&pid=394722&st=0&
HTTP/1.1 200 OK
Date: Tue, 08 Jan 2008 22:42:59 GMT
Server: Apache/2.0.61 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Content-Encoding: gzip
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=win-1251
Content-Length: 9747


Не подскажете как можно заставить HC самому обновлять страничку до появления нормального ответа?

Есть мысль, что для ответа длиной 378 нужно заменить "HTTP/1.1 200 OK" на "502 Client disconnected (HC)" (точно не помню). Как в lua делается поиск и замена?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #6 : 09 января 2008, 14:23:45 »

Есть мысль, что для ответа длиной 378 нужно заменить "HTTP/1.1 200 OK" на "502 Client disconnected (HC)" (точно не помню). Как в lua делается поиск и замена?

Держи готовый скрипт:  replace_answer_code_to_502.lua

В lua.lst добавь строку:
10.253.0.39/forums/  <script=lua\replace_answer_code_to_502.lua>
чтобы этот скрипт работал только на твоем локальном форуме.

* replace_answer_code_to_502.zip (0.66 Кб - загружено 151 раз.)
Сообщить модератору   Записан
mzr
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 17


« Ответ #7 : 09 января 2008, 18:09:28 »

Спасибо!
Буду пробовать.
Сообщить модератору   Записан
ziablik
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 18


« Ответ #8 : 15 января 2008, 22:17:21 »

Цитата из http://handycache.ru/content/view/27/26/ :
Код:
в список серверов-посредников добавить строку (использовать команду Добавить из буфера):

#5#~#True#~#lua#~#script://lua/answer#~#lua.lst#~#.*

Вопрос: где настройки этих "серверов-посредников"? Имеется ввиду "Внешний прокси"? Можно-ли более подробно, куда именно добавлять? Для чайников, так сказать.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #9 : 15 января 2008, 22:32:27 »

где настройки этих "серверов-посредников"?

"Настройки / Общие / Управление загрузкой" - нижняя таблица
Сообщить модератору   Записан
ziablik
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 18


« Ответ #10 : 15 января 2008, 22:44:22 »

Спасибо!
Имеет смысл в инструкцию добавить, а то сразу и не заметил Улыбка
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #11 : 09 февраля 2008, 12:29:38 »

DenZzz
Имхо, было б хорошо, если б скрипт dont_update_file_by_size умел учитывать длину добавляемых НС строк в HTML- и GZip-файлы. Сейчас для этой категории УРЛов необновление невозможно (например, http://dev.perl.org/perl6/doc/design/syn/S05.html), хоть файл реально и не изменяется от запроса к запросу.
Т.е. в скрипте надо парсить Content-Type и Content-Encoding.
Поможешь в этом вопросе?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #12 : 09 февраля 2008, 16:13:53 »

Имхо, было б хорошо, если б скрипт dont_update_file_by_size умел учитывать длину добавляемых НС строк в HTML- и GZip-файлы.

С GZIP все просто: если есть "Content-Encoding" в заголовке ответа, то к длине тела прибавляем длину нужных заголовков + служебные символы и сравниваем это с длиной файла в кэше. Это сделать можно.

С HTML сложнее - лезть внутрь файла в кэше не хочется, а из заголовков мы не можем знать точно, добавлял ли HC чего в файл в кэше или нет. Если же всегда делать предположение, что добавлял, то иногда могут быть ложные срабатывания скрипта, хотя вероятность этого крайне низка...

Завтра попробую написать соответствующий скрипт...
« Последнее редактирование: 09 февраля 2008, 16:41:26 от DenZzz » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #13 : 09 февраля 2008, 17:50:57 »

У HTML можно проверять оба размера - с добавлением и без него. Если любой из этих размеров равен Content-Length, то не обновлять файл. Вероятность ошибочного срабатывания, имхо, пренебрежимо мала.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #14 : 10 февраля 2008, 12:17:38 »

Михаил

Имхо, было б хорошо, если б скрипт dont_update_file_by_size умел учитывать длину добавляемых НС строк в HTML- и GZip-файлы.

Поправил скрипт. Попробуй.

* dont_update_file_by_size.zip (1.07 Кб - загружено 237 раз.)
« Последнее редактирование: 26 февраля 2008, 21:19:59 от DenZzz » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #15 : 10 февраля 2008, 14:58:45 »

DenZzz
Попробовал на GZip - работает отлично. Позже затестю на HTML. Спасибо.  Отлично!
Сообщить модератору   Записан
rubel
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 14


« Ответ #16 : 10 февраля 2008, 18:41:32 »

DenZzz
Скачал твои скрипты.А дальше что с ними делать?Куда поместить, где и что прописать?Поиском по форуму не нашёл.Будет ли отображаться срабатывание скрипта в мониторе?
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #17 : 10 февраля 2008, 20:10:55 »

DenZzz
Погонял на HTML. Работает как надо!
Сообщить модератору   Записан
mzr
Новичок
*

Репутация: +1/-0
Offline Offline

Сообщений: 17


« Ответ #18 : 10 февраля 2008, 20:54:10 »

Код:
10.02.2008/20:52:01 User_3:28:35/127.0.0.1 http://www.beta.acorp.ru/forum/viewtopic.php?t=3556 14578 14578/0 100% 802 "200 From RAMCache (HC)" lua, Dont update from script lua  Dont update from script

Небольшой вопрос. В мониторе показан размер странички 14578 и срабатывание скрипта "не обновлять". Реально из инета грузится только заголовок, а число 14578 показывает размер взятого из кэша?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #19 : 10 февраля 2008, 22:23:19 »

Скачал твои скрипты.А дальше что с ними делать?Куда поместить, где и что прописать? Поиском по форуму не нашёл.

Почитай здесь...

Реально из инета грузится только заголовок, а число 14578 показывает размер взятого из кэша?

Да.

Погонял на HTML. Работает как надо!

Хорошо. Поправил обработку лишних пробелов в заголовках, как в коде mai62. Выложил выше...
Сообщить модератору   Записан
Страниц: [1] 2 3 ... 11   Вверх
  Отправить эту тему    Печать  

 
Перейти в: