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

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

Данная команда запускает встроенный в парсер веб-сервер на указанном порту, корнем веб-пространства будет текущая директория (в которой вы находитесь в момент запуска). В режиме веб-сервера все запросы обрабатываются методом
main класса httpd, который добавлен в конфигурационный auto.p и в котором реализована логика работы веб-сервера - исходя из того, к какому адресу обратился пользователь (изображение, парсерный код, директория), веб-сервер либо сам обработает запрос (например вернет файл с изображением), либо передаст управление файлу с кодом на парсере, к которому сделан запрос. При запуске можно указать конкретный IP адрес или имя, тогда парсер будет принимать соединения только на нем. Например, при запуске parser3 -p localhost:8000 соединения будут приниматься только на локальном интерфейсе, закрытом от доступа извне. Встроенный веб-сервер не поддерживает шифрование и keep-alive, на хостинге правильнее использовать его в комбинации с nginx. Настройки веб-сервера задаются в хеше $cfg:

$cfg[
        $.parser[(\.html^$)]
- регулярное выражение, содержащие расширения файлов с кодом на парсере
        $.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) - вызвать сборщик мусора, если при обработке ранее поступивших запросов было аллоцировано более 64Mb памяти
#       $.log[/access.log] - включить логгирование приходящих запросов
]

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

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

Пример

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


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



In order to add comments you must register.
Copyright © 1997–2021 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 28.01.2021