1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/love_linger-OmniWeb

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

OmniWeb

LUA WEB-сервер

Особенности

  1. Скорость и компактность — неизменные цели этого программного обеспечения.
  2. Интеграция с GNU libmicrohttpd (0.9.59), LuaJIT (2.1.0b3), lua-CJson, lua-resty-template, tinyxml2.
  3. Поддержка таймеров и ежедневных задач.

Пример проекта

Team — система управления лёгкими проектами. После версии Team 2.0 переписана на Go. Для ознакомления с использованием рекомендуется перейти к версии 1.x.

Конфигурация

Конфигурационный файл omni.ini:

; Основные настройки
[main]
port=80                                 ; HTTP-порт для прослушивания, по умолчанию 80
expire=900000                           ; Время хранения данных по умолчанию (в миллисекундах), по умолчанию 15 минут
verbose=no                              ; Отображать ли подробные журналы доступа (yes|no), по умолчанию no
use_session=yes                         ; Включить ли сессии, по умолчанию нет
#script_entry=script/app.lua            ; Файл входа
#scheduler_script=scripts/scheduler.lua ; Скрипт планирования времени, если не установлен, планирование времени не используется

; Пользовательские страницы ошибок, поддерживают только статические страницы
[error_pages]
#404=scripts/view/404.html
#405=scripts/view/405.html

; Список каталогов для загрузки файлов, alias=path
[shared_dirs]
#upload=uploads ; Доступ к /upload/1.txt указывает на ./uploads/1.txt
#some=E:\1      ; Доступ к /some/1.txt указывает на E:\1\1.txt

; Другие пользовательские настройки

[Примечание] Содержимое конфигурационного файла будет записано в глобальную таблицу Lua config.

Каталог развёртывания

См. каталог bin.

somewhere               -- Указанная пользователем папка
|
|-- omni/omni.exe       -- Исполняемый файл, скомпилированный в выпуске
|-- omni.ini            -- Конфигурационный файл
|
|-- www                 -- Папка со статическими файлами (css, images, fonts, js и т. д.)
|   |-- favicon.ico     -- Значок сайта
|   |-- css             -- CSS
|   |-- js              -- JS
|   |-- fonts           -- Fonts
|   |-- images          -- Изображения
|
|-- scripts             -- Папка с кодом и шаблонами
    |-- app.lua         -- Обязательный, определение маршрута (распределение запросов)
    |-- controller      -- Контроллер
    |-- model           -- Модель данных
    |-- vendor          -- Плагины LuaJIT (рекомендуется искать в luapower)
    |-- view            -- Папка шаблонов

Маршрутизация

  1. Поддерживает регулярные выражения (Posix Regex).

  2. Интерфейс: | Метод | Описание | | --- | --- | | router:get(filter, proc) | GET-маршрут | | router:post(filter, proc) | POST-маршрут | | router:any(filter, proc) | Маршрут без ограничений |

  3. Пример:

-- Главная страница
router:get('^/$', function(req, rsp)
    custom_router(default_ctrl, default_action, req, rsp);
end);

-- MVC
router:any('^/([A-Za-z][A-Za-z0-9_/]*)/([A-Za-z][A-Za-z0-9_]*)$', function(req, rsp, controller, action)
    custom_router(controller, action, req, rsp);
end);

-- MVC (действие по умолчанию)
router:any('^/([A-Za-z][A-Za-z0-9_]*)$', function(req, rsp, controller)
    custom_router(controller, default_action, req, rsp);
end);

-- MVC (действие по умолчанию, многоуровневый контроллер)
router:any('^/([A-Za-z][A-Za-z0-9_/]*)/$', function(req, rsp, controller)
    custom_router(controller, default_action, req, rsp);
end);

Запрос (таблица маршрутизации proc, первый параметр)

Свойство Описание
url URL запроса, например /home/index?aa=1, где /home/index — это url
method HTTP-метод. GET/POST/PUT/DELETE
remote IP клиента
cookie Таблица Cookie
get Параметры запроса. Например, req.get.uid
post Параметры POST-запроса
file Путь к файлу загрузки. Например: req.file.kk — это FORM с name=kk и FILE, сохранённым в этом пути

[Примечание] Загруженные файлы будут автоматически удалены после завершения запроса. Если необходимо сохранить файл, используйте os.cp(from, to) для копирования в другую папку.

Ответ (класс маршрутизации proc, второй параметр)

Метод Описание
header(k, v) Установить заголовок ответа HTTP, например: rsp:header('Content-type', 'text/plain')
echo(str) Вывести содержимое. Например: rsp:echo('ssss')
html(view[, data [, is_plain]]) Вывести содержимое и установить Content-type как text/html
json(table[, set_header]) Вывести таблицу как JSON-содержимое, можно установить Content-type как application/json
file(path) Отправить файл клиенту, не принудительная загрузка
error(code) Отправить сообщение об ошибке. Необходимо контролировать return самостоятельно
redirect(url) Перенаправить. Необходимо контролировать return самостоятельно
cookie(k, v[, expire[, path]]) Установка COOKIE

Сессия

  1. Сессии доступны после настройки use_session = yes в файле omni.ini.
  2. Сессия является глобальной таблицей, изменения автоматически сохраняются.
  3. Очистить сессию можно, выполнив session = {}.

Шаблоны

  1. Синтаксис см. в lua-resty-template.
  2. Вызов рендеринга через rsp:html(view, data, is_plain).
Параметр Обязателен Описание
view Да HTML-текст или путь к HTML-файлу
data Нет Необходимые параметры для генерации динамической страницы
is_plain Нет Является ли параметр view HTML-текстом

Глобальное хранилище

Использует хранилище key-value со строковыми значениями. Поскольку каждый HTTP-сеанс использует отдельную Lua VM, данные, которые необходимо хранить глобально, следует использовать в storage.

Метод Описание
storage.get(k) Получить значение, хранящееся в key. Возвращает nil, если ключ не существует или срок действия истёк.
storage.set(k, v, never_expire) Сохранить строку.
Функция Возвращаемое значение Описание
scheduler.daily(12, 0, 0, function()) целое число Создаёт задачу, которая будет выполняться ежедневно. Возвращает идентификатор задачи.
scheduler.timer(12000, function(), true) целое число Создаёт таймер, который будет срабатывать каждые 12 секунд. Возвращает идентификатор таймера.
scheduler.is_valid(id) логическое значение Проверяет, существует ли задача с указанным идентификатором.
scheduler.remain(id) число Определяет, сколько миллисекунд осталось до следующего срабатывания задачи с указанным идентификатором.
scheduler.cancel(id) Отменяет задачу с указанным идентификатором.

Интерфейс Lua-слоя C++

Расширяет библиотеку os.

Функция Возвращаемое значение Описание
os.exists(filepath) логическое значение Определяет, существует ли файл или каталог по указанному пути.
os.cp(filepath, to) логическое значение Копирует файл по указанному пути в новое место.
os.rm(filepath) логическое значение Удаляет файл по указанному пути.
os.mkdir(path) логическое значение Создаёт каталог по указанному пути.
os.filesize(path) целое число Получает размер файла в байтах по указанному пути.

Глобальные функции

Функция Возвращаемое значение Описание
uuid() строка Генерирует уникальный идентификатор.
md5(data) строка Вычисляет MD5-хеш данных.
hash(data) целое число Вычисляет BKDR Hash-значение данных.
crc32(data) целое число Вычисляет CRC32-контрольную сумму данных.
random([int[, int]]) вещественное число Генерирует случайное число.
tick() вещественное число Возвращает время процессора в миллисекундах.
inherit(table) таблица Имитирует наследование.

JSON

| Функция | Возвращаемое значение | Описание | | json.encode(v) | строка | Преобразует переменную Lua в строку JSON. | | json.decode(v) | v | Разбирает строку JSON и преобразует её в переменную Lua.

XML

| Функция | Возвращаемое значение | Описание | | xml.parse(xml_string) | таблица | Анализирует XML и возвращает таблицу формата {name=xxx, value=xxx, attr={}, children={} }.

BASE64

| Функция | Возвращаемое значение | Описание | | b64.encode(s) | строка | Выполняет кодирование Base64 строки s. | | b64.decode(s) | строка | Декодирует строку s, закодированную с помощью Base64.

LOGGER

| Функция | Возвращаемое значение | Описание | | log.verbose(s) | nil | Выводит информацию уровня Verbose. | | log.info(s) | nil | Выводит информацию уровня INFO. | | log.warn(s) | nil | Выводит предупреждение. | | log.error(s) | nil | Выводит сообщение об ошибке.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

ЛУА HTTP-сервер. Развернуть Свернуть
MIT
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/love_linger-OmniWeb.git
git@api.gitlife.ru:oschina-mirror/love_linger-OmniWeb.git
oschina-mirror
love_linger-OmniWeb
love_linger-OmniWeb
master