http
Исходящие HTTP-запросы, не блокирующие кадр.Как это устроено
Запрос уходит на рабочий поток, ответ возвращается в игровой — тем же проходом, которым тикают таймеры. Ни одна строчка плагина не касается сокета, и ни один рабочий поток не касается Lua: между ними ходят только байты. Из этого следует главное свойство: постановка запроса ничего не ждёт. Вызов возвращается сразу, кадр идёт дальше, коллбэк приходит когда придёт. Потоков два. Один медленный адрес не мешает другому плагину, а плагин, обходящий список игроков в цикле, не наплодит сотню потоков — лишнее встаёт в очередь.Транспорт
Тот, что уже есть в системе, поэтому модуль остаётся одним файлом рядом с метамодом: ни OpenSSL, ни libcurl рядом класть не нужно.
На Linux libcurl не линкуется, а подгружается — поэтому для сборки не нужен
32-битный
-dev пакет, а сервер без libcurl нормально загрузит модуль и скажет,
чего не хватает, при первом запросе.
Объект ответа
Коллбэк получает одну таблицу — как и обработчик события.404 — не сбой транспорта, но и не успех: ok будет false, а error
заполнен, чтобы if not res.ok then print(res.error) end работал без разбора
частных случаев.
Границы
Перезагрузка и выгрузка
Запросы, оставшиеся на проводе, переживают иlua_reload, и выгрузку своего
плагина — но их коллбэки не выполняются: они ссылаются на состояние, которого
больше нет. Ответ просто выбрасывается.
Перезагрузка при этом не ждёт незавершённые запросы: прервать чужой сокет
на середине нельзя, а держать сервер до конца самого медленного из них — хуже,
чем потерять его ответ.
http.get
Выполняет GET-запрос.Аргументы
Возвращает
Опции
Пример
Смотри также
http.post
Выполняет POST-запрос с телом.Аргументы
Возвращает
Пример
Заголовок
Content-Type не подставляется сам: сервер на той\nстороне обычно требует конкретный, и угадывать его — плохая\nидея.http.request
Выполняет запрос произвольным методом.Аргументы
Возвращает
Опции
Пример
http.cancel
Отменяет запрос по id.Аргументы
Возвращает
Гарантия здесь одна: коллбэк не выполнится. Сам запрос, если он уже ушёл в сеть, доигрывается до конца — оборвать чужое соединение на середине нельзя.