Итак сделю некоторые оговорки:
1. Что такое Framework точно сам не знаю, но подозреваю, а гуглить лень. В общем что то вроде "надстройка над языком, немного упрощающая написание скриптов" .
2. Желание: иметь возможность писать скрипты прям в *.htm перемешивая с кодом html... (ну что то типа php)
3. Что имеем: некий framework работающйи по принципу: апач по запросу странице, пересылает её (страницу) конкретном скрипту, который обрабатывает её, выполняет встроенный код ну и тп и тд. Всё работает прекрасно, ток медленно :)
4. В голове долгое время лдетает мысль сделать то же самое но с использованием fastcgi. Но тут сразу ступор, как это сделать, Учитывая Синтаксис и Принцип работы fastcgi скриптов
5. Опыта написания подобных скриптов нет... понимание технологии так же оставляет желать лучшего, но есть стабильный прирост познания в изучении..
Может кто нибудь предложить абстрактно способ реализации онного?
Например как я это вижу:
- скрипт выполняющий всю основную работу, назовем Basta.fpl (от балды название...)
- апач перенаправляет все запрошенные странички на Basta.fpl, например запросили страницу bumbaracha.htm
- тот парсит все это дело, создает на основе perl кода priemnik.fpl скрипт и запускает его, в качестве шаблона вывода использует html код из bumbaracha.htm
- в результате имеем запущенный priemnik.fpl который висит как демон на сервере, и теперь все запросы на страницу bumbaracha.htm будут перенасправляться на Basta.fpl, тот проверит есть ли готовый priemnik.fpl (созданый по предыдущему запросу) или создаст новый скрипт и запустит его. соответственно на него и перенаправляет запрос, а тот уже выдает результат.
что то в этом духе....
да, я знаю что "нехорошо" и "небезопасно" заниматься подобными делами (встраивать perl код в html).
но плюсы от подобной реализации ( без использования fastcgi) довольно увесистые ( проекты, большие, маленькие, создаются на лету..)
ну так я свою мысль изложил, хочется услышать что нибудь конструктивное
спасибо за внимание.

Мысли влух...
Уважаемый Kavkaz!
Не могли бы Вы донести до меня идею о том, зачем "иметь возможность писать скрипты прям в *.htm перемешивая с кодом html" (кстати иметь ее можно уже сейчас используя http://search.cpan.org/~grichter/HTML-Embperl-1.3.6/Embperl.pod)?
Я всегда старался разделять обработку данных и отображение (хотя не всегда получается грамотно). Кажушаяся простота совмещенного варианта неминуемо обернется совершенно неподдерживаемой системой. Это из личного опыта написания "велосипедов с квадратными колесами".
Чем стандартные решения не устраивают? Другие-то проекты нормально функционируют.
Игорь Гердлер
удобно
не хочу показаться грубым, но хотелось бы услышать не "зачем?"
пусть в некоторых моментах (грубо говоря написав свой обрабтотчик GET-POST а не использовав CGI.pm) изобрету велосипед..
УДОБННО, это просто очень удобно А хочется что еще и побыстрее было.
просто это все парсится при каждом запросе страницы, загружается каждый раз интерпретатор... кароче медленно хочется чтоб если один раз эту страницу запросили, её не парсить повторно, а подгрузить сразу... все таки мало примеров использования fastcgi ознакомитльные примеры это ознакомительные примеры...
пояснение
Я всегда старался разделять обработку данных и отображение (хотя не всегда получается грамотно). Кажушаяся простота совмещенного варианта неминуемо обернется совершенно неподдерживаемой системой. Это из личного опыта написания "велосипедов с квадратными колесами".
покане могу себе представить подобной ситуации
Чем стандартные решения не устраивают? Другие-то проекты нормально функционируют.
Игорь Гердлер
в голове такая каша, из за постоянного размышления как лучше доработать, что стандартные решения "в корне" не рассматриваются
Как бы правильней направить развитие темы в нужное русло:
Больше интересует не возможность и реализация встраивания кода в html а реализация самих cgi скриптов при подключенном модуле fastcgi
мне пока что мало той информации про FastCGI/Perl что я уже прочитал
буржуйские сайты - ну тут как у большинстваа, хромает язык
В развитие...
Уважаемый Kavkaz!
Попробую направить дискуссию в конструктивное русло. Чем не устраивает стандартный вариант повышения производительности приложения, созданного по стандартной схеме - использование кэширования?
Пример: есть скрипт, который делает 3 запроса к БД (скажем, выводит последние 20 сообщений на форуме). Пусть время выполнения скрипта 0.1 сек. Если у нас ограничение в 10 одновременно работающих процессов (что стандартно для fastcgi и нестандартно для apache+mod_perl), то за 1 секунду сервер обработает не более 100 запросов к этому скрипту.
Применяем кэширование: к стандартной связке nginx <-> apache+mod_perl добавляем apache+mod_accel (nginx <=> apache+mod_accel <=> apache+mod_perl). В каждом сообщении форума есть поле last_update, которое хранит дату последнего изменения поля. При создании страницы в ответ добавляем заголовок Last-Modified:. При этом ответ скрипта кэшируется mod_accel. При следующем обращении к скрипту mod_accel передает в запросе заголовок If-Modified-Since:. В случае наличия этого заголовка скрипт сначала делает дополнительный запрос к базе на получение даты последнего изменения сообщений форума. Если дата, полученная из базы не позже даты, указанной в заголовке If-Modified-Since:, то скрипт просто возвращает ответ с кодом 304 (Not Modified) и завершает выполнение. Предположим, что время выполнения скрипта с кешированием - 0.01 с (при включенном кэше в СУБД, оно будет гораздо меньше при последующих идентичных запросах). В результате имеем при тех-же условиях 1000 вместо 100 запросов в секунду.
Производительность можно еще повысить, сохраняя часть данных, полученных из БД (и не только) в memcached (что, вобщем-то, и делают многие разработчики высоконагруженных проектов).
добавляем условия
сразу скажу Вам, ginnie, спасибо за внимание
но давайте расставим приоритеты,
- хотим повысить производительность - факт
- apache+mod_perl не рассматриваем, это я использовать точно не буду
- nginx так же оставим в покое
описанная вами схема безусловна достойна внимания, но это не совсем то. Это принесет прирост в производительности в больших проектах, но чёрт возьми, я за другими зайцами бегу
масштабируемость проекта? если я захочу переместить проект на другой сервер, мне там все это настраивать и поднимать? или просто установить модуль fastcgi.
можем все таки остановить и рассмотреть схему которую я обрисовал, мне бы её прокоментировать
можно конечно закрыть тему и пойти напролом, но если придется при выявлении "подводных камней" переписывать парсер, боюсь на долго меня не хватит.
Давайте рассмотрим Вашу схему...
Если я правильно понял Вашу схему, Basta.fpl будет выступать в роли "компилятора" скрипта priemnik.fpl. За счет чего в Вашей схеме будет прирост производительности? За счет fastcgi? Да, если сравнивать Вашу схему с вариантом, выполняемым как обычный cgi-скрипт под Apache. Если же сравнивать с производительностью варианта запуска в fastcgi скрипта priemnik.fpl, созданного программистом, а не другим скриптом Basta.fpl, то производительность такого варианта будет выше (точно не ниже).
Если я что-то в Вашей схеме не так понимаю... поясните схему подробнее.
продолжим
В принципе вы все правильно поняли.
вместо того, чтобы руками создавать priemnik.fpl его будет формировать парсер Basta.fpl
получаю: в демонах будет теперь висеть priemnik.fpl , значит время на запуск интерпретатора тратиться не будет, тот момент, ради которого я и решил заняться данным вопросом. Если мне обоснуете, что "стОящего" прироста производительности не будет, я успокоюсь. Вы вроде как тоже согласны с тем что прирост будет.
Дальше вопрос, создавать скрипты руками или парсером: ну я бы не создаал эту тему, если бы в этом моменте не определился... Парсер будет однозначно.
дальше еще момент, прежде чем скажу, оговорка:
сейчас парсер (обычный cgi скрипт) при обработке файла работает по схеме: увидил кусок perl кода, выполнил его в eval, результат пишет в конечный htm файл, который впоследствии и отдается пользователю.. не будем обсуждать этот принцип работы. Просто отталкиваясь от плюсов и минусов данной схемы хочется сделать более менее правильные выводы, которые использую для создания Basta.fpl
Итак:
мне придержаться подобной техники и просто сканировать поступившие на вход Basta.fpl файлы, попутно выполняя найденный перл код в eval и в дальнейшем вставляя результат в конечную html страницу или как изначально описал, "собирать" fastcgi скрипт priemnik.fpl , запускать его... ?
Рисуем схему...
Если честно, первый раз вижу подобный подход. Уже один этот факт заставляет задуматься. Постараюсь описать, что мне не нравится в этой схеме:
1. Web-разработка обычно подразумевает, что одновременно будет выполняться несколько экземпляров скрипта, обрабатывая запросы разных (в общем случае) пользователей. Если Вы планируете иметь один экземпляр priemnik.fpl для всех экземпляров Basta.fpl, то он будет обрабатывать один запрос в единицу времени. Если каждый экземляр Basta.fpl будет иметь собственный демон priemnik.fpl, очевиден необоснованный расход памяти на дополнительный скрипт с интерпретатором. Производительность упадет из-за памяти и необходимости осуществлять межпроцессное взаимодействие и использование дополнительного кода в priemnik.fpl для его "демонизации".
2. Парсер тоже отрицательно влияет на производительность под fastcgi:
код eval{$parsed_part}; не может быть скомпилировано в байт-код для неизвестного во время компиляции значения $parsed_part. Следовательно для обработчика кода html-perl можно ожидать только компиляции кода самого обработчика, но не кода, который он обрабатывает.
Как обычно делаю я: использую стандартную схему. Пишу код, генерирующий динамическое содержимое страницы (этот код нормально компилируется), вывожу сгенерированные данные с использованием html-шаблона (HTML::Template, тоже компилируется при первом использовании).
Я не говорил, что нестандартно использование fastcgi - нестандартна предложенная Вами схема. Стандартная схема используемая в варианте fastcgi дает большую производительность при меньших (гораздо меньших) затратах (как на разработку, так и на поддержку).
Подробнее с экземплярами
Что то я немного запутался, итак:
-перезагрузили сервер, запустился апач, никакие демоны не загружены
-пошел первый запрос на bumbaracha.htm, апач перенпрвялете его на Basta.fpl
-Basta.fpl срабатывает по описаному вами выше алгоритму, запускает priemnik.fpl
--имеем 1демон Basta.fpl и 1 демон priemnik.fpl
-пошел второй запрос на bumbaracha.htm, апач перенпрвялете его на запущенный демон Basta.fpl
-Basta.fpl перенаправляет на запущенный демон priemnik.fpl
-и тд.
и вот пошли интересные мне тонкости:
1. что происходить будет когда priemnik.fpl не будет справляться с кол-вом запросов в единицу времени (кстати где стоит это ограничение на число возможных обработаных запросов в единицу времнеи)?
2. что происходить будет когда Basta.fpl не будет справляться?
примечание1: насколько я знаю если один демон(экземпляр) начинает несправляться, происходит запуск еще одного демона(экземпляра) - копии, и нагрузка распределяется между ними.
и я подразумеваю ответы на два своих вопроса дает "примечание1"
т.е. если допустим
Basta.fpl может обработать 10 запросов в секунду, а имеем 15 запросов в секунду, то в памяти будут висеть два демона(экземпляра) Basta.fpl
причем из этих 15 могут(допустим) только 7 запросов быть к bumbaracha.htm -> priemnik.fpl
соответсвенно priemnik.fpl также может обработать 10 запросов в секунду, и он обрабатывает пришедших ему 7 запросов от двух демонов Basta.fpl
пока у меня такой ход мыслей, поправьте пожалуста.
вот интересен момент из вопроса 1, где, как указано ограничение на кол-во обрабатываемых запросов, если оно вообще есть (может какая нибудь "очередь" запросов)
Про экземпляры и не только...
Так происходит только с обычными cgi и mod_perl-скриптами под apache. В fastcgi обычно запускается фиксированное число процессов (при помощи менеджера процессов). Поэтому, когда Basta.fpl начнет "несправляться" пользователи станут получать ошибки от серера.
Еще раз хочу повторить, что весь функционал priemnik.fpl по получению, обработке запроса и выдаче ответа Вам придется реализовывать самому (готового варианта Basta.fpl->process(priemnik.fpl) никакого нет).
вот и загвоздки
Вот, наверно, те (тот) момент где я не на то расчитывал...
просто вот даже завел на локальном компе apach+fastcgi
запускаю test_modul.fpl
смотрю запущенные процессы
и, позапускав в браузере подряд этот скриптик такое увидел...
вроде раз сто запустил а процес ведь один запущен?
не подскажете где можно "по делу" прочитать про тонкости fastcgi ?
продолжим
да, начиная переходить от идеи к способу реализации, понимаю насколько все "сложно"
но я пока стою на своем и есть желание этого добиться.
кстати о вопросах на будущее: при отладке скриптов, мне каждый раз придется перезапускать веб сервер?
так как допустим загасить запущенный test_modul.fpl у меня не получилось. родился просто новый
про отладку не очень понятно...
но я пока стою на своем и есть желание этого добиться.
Желаю удачи!
так как допустим загасить запущенный test_modul.fpl у меня не получилось. родился просто новый
А Вам при отладке разве не это нужно?
отладка
если я внесу какие то изменения в test_modul.fpl то увижу изменения в браузере только после перезапуска апача
Продолжение про отладку...
Разве после внесения изменений и завершения запущенного test_modul.fpl, вновь запускаемый test_modul.fpl не содержит внесенных изменений? Мне почему-то кажется, что должен запуститься модифицированный вариант.
проверил
Разве после внесения изменений и завершения запущенного test_modul.fpl, вновь запускаемый test_modul.fpl не содержит внесенных изменений? Мне почему-то кажется, что должен запуститься модифицированный вариант.
извиняюсь, именно так и происходит, раньше значит что то не так делал...
спасибо за советы, теперь бум потихоньку воплощать в жизнь идеи.....