Мой вклад в Lua
Список составлен от самых новых публичных работ до самых старых (старые в конце). Совсем незначительные работы в список не включены.
🚀 Портирование express.js на Lua
Мой новый крупный проект, до которого в мире не существовало (или я не нашел) минималистичных non-blocking веб фреймворков, написанных на Lua. Несмот ря на то, что это всего лишь порт чужого проекта с NodeJS, он потрепал мне вдоволь нервов. Хотя бы потому что у express.js был свой NodeJS, а у Lua – нет
💠 lua-express 💠 – портирование популярного
express.js
в чистый Lua. Старательный пост в блоге: тут
- Проверен в бою на production сервере GMDonate API
- Легко установить в отличии от Turbo, Luvit, Lapis
- Все еще минимальное количество зависимостей
Готовые Middlewares
Портированы body-parser
, cookie-parser
, написаны несколько своих middlewares, таких как rate-limiter
и validator
.
Посмотреть можно: тут
Готовый long-polling
сервер
Он написан как раз на lua-express
и о нем лучше почитать в блоге: тут
Асинхронный MySQL клиент на голых сокетах
💠 luasocket-mysql 💠 – форк драйвера от OpenResty, переделанный таким образом, чтобы выполнять MySQL non-blocking запросы. Для Redis я тоже почти написал аналогичное решение, но еще не опубликовал. Если нужно – дайте знать.
- Реализован MySQL Connection Pool. Создается несколько соединений с MySQL и если одно соединение занято тяжелым запросом, то новый запрос будет сделан параллельно
- Никаких бинарных модулей, кроме luasocket, никаких ffi. Чистый Lua
- Проверен в бою на Production API GMDonate
✈️ Библиотека для создания Telegram ботов
💠 ggram 💠 - моя библиотека для создания Telegram ботов на Lua с асинхронностью.
- Может работать как внутри Garry's Mod, так и в чистом Lua без пачки зависимостей.
- На ней написаны почти все мои боты
- Асинхронная обработка команд и реализация подобия middlewares (изменения контекста запроса в процессе)
- Возможность отправки файлов в формате
multipart/form-data
Портирование Garry's Mod функций в чистый Lua
💠 lua-gmod-lib 💠 – портирование специальных функций из Garry's Mod в чистый Lua.
- Реализация
http.*
,timer.*
,PrintTable()
,MsgC()
и других функций. - Полезно для написания "кроссплатформенных" приложений, которые смогут работать и в гмоде и в чистом луа.
- Сложность заключалась в основном как раз в таймерах и http функциях, потому что я до сих пор не нашел никого, кто сделал бы нормальные асинхронные http обертки в Lua
Асинхронные (non-blocking) HTTP запросы
Это то, что мне больше всего мешало заняться чистым Lua. Мне хотелось писать на нем все те прикольные штуки, которые люди делают на NodeJS и Python, но в Lua не было даже асинхронных HTTP клиентов, не говоря уже о фреймворках для телеграм ботов. Об "non-blocking" вещах в Lua словно никто и не думал, кроме copas (который даже сейчас не очень популярен (200 звездоче к. Когда я начинал, было 150)).
💠 lua-requests-async 💠 – библиотека, позволяющая выполнять асинхронные HTTP запросы в чистом Lua.
- Один из моих телеграм ботов 24/7 выполняет через либу десятки запросов в секунду (@vk_reposter_bot) уже больше 2 лет
- Нет никаких тяжелых зависимостей. Чисто copas и luasocket
- Поддержка HTTPS запросов. Для NodeJS и Python это само собой разумеющееся, а для Lua – хрен нагуглишь
- Пришлось пройти очень большой путь с десятками бессонных ночей, чтобы асинхронные запросы работали корректно продолжительное время
Возможно, я уже создал и другие штуковины на чистом Lua, но забыл их вписать здесь. Я думаю, что если ничего не изменится и я не смогу выхватить крутой юзернейм для организации в GitHub, то все новые разработки будут публиковаться в организации моего первого Lua детища вот здесь.
🙏 Если вы заметили, что я что-то забыл тут добавить – напишите в ЛС или создайте Pull Request или Issue, пожалуйста