Использование Parser в качестве веб-сервера   [3.4.6]

/путь/к/parser3 -p [хост:]<порт>

Данная команда запускает встроенный в Parser веб-сервер на указанном порту, корнем веб-пространства будет текущая директория (в которой пользователь находится в момент запуска). В режиме веб-сервера все запросы обрабатываются методом
main класса httpd, который добавлен в конфигурационный auto.p и в котором реализована логика работы веб-сервера - исходя из того, к какому адресу обратился пользователь (изображение, Parser-код, директория), веб-сервер либо самостоятельно обработает запрос (например вернет файл с изображением), либо передаст управление файлу с кодом на Parser, к которому сделан запрос. При запуске можно указать конкретный IP-адрес или имя, тогда Parser будет принимать соединения только на нем. Например, при запуске parser3 -p localhost:8000 соединения будут приниматься только на локальном интерфейсе, закрытом от доступа извне. Встроенный веб-сервер не поддерживает шифрование keep-alive, на хостинге правильнее использовать его в комбинации с nginx. Настройки веб-сервера задаются в хеше $cfg:
        $.parser[(\.html^$)] - регулярное выражение, содержащее расширения файлов с кодом на Parser;
        $.index[index.html] - название индексного файла; при обращении к директории выдастся он; для упрощения кода предусмотрен один индексный файл,
но несложно добавить еще;
#       $.autoindex(true) - отображение листинга файлов в директории при отсутствии индексного файла;
        $.404[$404] - обработка ошибки 404; можно вызвать метод $.404[/404.html], а можно передать управление определенному файлу;
#       $.fix-trailing-slash(true) - выдача редиректа с добавлением символа «/» при запросе директории без этого символа на конце;
#       $.auth[ $.url[^^/\.?admin/] $.login[admin] $.password[change me] $.realm[site administration] ]
 - запрос авторизации при доступе к разделам, подходящим под регулярное выражение
        $.deny[(/\.ht[^^/]+|\.p|\.cfg)^$] - регулярное выражение, показывающее, к каким файлам доступ запрещен, например к файлам .htaccess и auto.p;
        $.403[Permission denied] - обработка отказа в доступе; тоже может быть и методом, и файлом;
        $.memory(64000) - вызов сборщика мусора, если при обработке ранее поступивших запросов было аллоцировано более 64 МБ памяти;
#       $.log[/access.log] - включение логирования приходящих запросов.

Класс веб-сервера достаточно прост, всего около сотни строк, поэтому можно либо напрямую редактировать логику его работы, либо воспользоваться заложенными возможностями по расширению - в корень веб-пространства можно поместить файл
httpd.p, в котором переопределить методы класса httpd. В частности, можно переопределить методы ^config[] (принимает аргументом конфигурацию по умолчанию и может изменить ее перед возвратом) и ^preprocess[] (для обработки редиректов или замены адресов).

В конфигурационном методе, в хеше 
$HTTPD, можно задать режим работы веб-сервера и тайм-аут при обработке соединений:
·$.mode[sequental] - последовательная обработка запросов, по умолчанию; Parser работает в один поток, используя одно ядро процессора;  
·$.mode[parallel] - параллельный режим, недоступный под Windows; на каждый запрос создается отдельный процесс; в случае необходимости используются все ядра, что дает максимальную производительность при обработке кода;  
·$.mode[threaded] - многопоточный режим; на каждый запрос создается отдельный поток; за счет того, что все потоки используют один сборщик мусора, производительность немного ниже параллельного режима;  
·$.timeout(время) - задает максимальное время ожидания в секундах; если в течение заданного времени от клиента не поступят данные, соединение будет разорвано; в многопоточном режиме заданный тайм-аут не работает, фактический тайм-аут определяется операционной системой.  


Пример

$HTTPD[
   $.mode[parallel]
   $.timeout(8)
]

Задает параллельный режим и тайм-аут 8 секунд.



Copyright © 1997–2024 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 25.09.2024