
Yura
02.05.2018
08:00:12
Доброе утро, коллеги.
Использую библиотеку https://github.com/diegonehab/luasocket/blob/master/src/http.lua для rest-запроса на сервер. Но запрос падает по таймауту в 5 секунд, как увеличить timeout ожидания?
Устанавливал передавал функцию create в request, задавал поле http.TIMEOUT но ничего не помогает. Подскажите как решить эту проблему, может быть кто-то сталкивался?

Kukuzapa
02.05.2018
08:07:40
Он там вроде по умолчанию на 60 секунд выставлен.

Ilya
02.05.2018
08:10:08
Если отваливается через 5, то что-то не так с сервисом кмк.

Google

Vadim
02.05.2018
08:11:47
@korevikov а посоветовать вместо этого импользовать Lua-cURL будет совсем неподходящим? :)

Yuriy
02.05.2018
08:13:37
На сколько я вижу функция request не принимает в себя параметр TIMEOUT
По крайней мере
adjustrequest(reqt)
не обрабатывает поле TIMEOUT ни каким образом
Но можно самому дописать чтобы при
наличии поля
timeout в reqt библиотека переписывала бы дефолтный таймаут
И кстати дефолтный таймаут там - 60 секунд

Yura
02.05.2018
08:17:33

Ilya
02.05.2018
08:24:06
Таймаут - это параметр соединения.

Yuriy
02.05.2018
18:22:44

Alexey
02.05.2018
18:40:03
Таймоут соединения и запроса это в общем случае разные вещи.
При этом запрос может содержать несколько соединений(302).
И я использую запросы с редиректом
Но с точки зрения запроса таймоут определяется тем сколько клиент готов ждать результат
В libcurl есть параметр для такого таймоута.
Вот пример который я использовал для распаралеливания запросов.
https://gist.github.com/moteus/645497f1133ed683a85f6c6c083f1279

Alexander
03.05.2018
05:45:25
Ребята, есть коннектор для Apache Kafka из lua?

Snusmumriken
03.05.2018
06:31:00
Ну во-первых, такой коннектор тянет за собой ещё протокольную часть, вроде luasocket.
Во-вторых, насколько я вижу, протокол простенький и тупенький, главное - экранируй \r\n.
В третьих, почитай про питоновую либу и сделай так же:
https://docs.confluent.io/current/clients/index.html
Или переделай соответствующую js-либу, там даже немного кода переписывать.

Vadim
03.05.2018
07:05:39
в четвёртых, в гугле первой же строкой: https://github.com/doujiang24/lua-resty-kafka

Snusmumriken
03.05.2018
07:07:00

Vadim
03.05.2018
07:07:06
или не первой, и не для рести: https://mozilla-services.github.io/lua_sandbox_extensions/kafka/

Google

Vadim
03.05.2018
07:07:15
но в пределах первой страницы

Snusmumriken
03.05.2018
07:07:16
Воо, прелесть.

Alexander
03.05.2018
07:08:12
там упоминается openresty, он запуститься в обычном luajit?

Vadim
03.05.2018
07:08:41
1) кто "он"?
2) что такое "необычный" LuaJIT?

Alexander
03.05.2018
07:08:49

Насибуллин
03.05.2018
07:09:27
Ну, пока не попробуешь - не узнаешь
Кстати что такое питон-биндинги в контексте луа программирования?

Alexander
03.05.2018
07:09:54

Насибуллин
03.05.2018
07:09:58
это типа у луа есть особые методы вступать в отношения с питоном?

Snusmumriken
03.05.2018
07:10:49
Ну, вторая кафка - это тоже довольно специализированный модуль, написан на сишке, вроде как часть luasandbox.

Vadim
03.05.2018
07:11:28
https://github.com/mozilla-services/lua_sandbox_extensions/tree/master/kafka
это c-модуль
какой ffi?

Snusmumriken
03.05.2018
07:12:44
ЩИТОА?
Не кипеши.
Карочи, берём питоновую или js-либу и аккуратно переписываем под луасокет, ничего сложного, дело (полу)часа.

Vadim
03.05.2018
07:13:11
это если есть либа на чистом питоне, а не тоже c-модулем
иначе проще будет взять вон то по ссылке выше :)

Snusmumriken
03.05.2018
07:13:38
Кафка - типа "языконезависимая" лабудонь, обычный TCP-коннект, так же как общение с редиской или http или sql.

Google

Насибуллин
03.05.2018
07:14:57
а я думал питон как то можно типа встроить в луа программу
ну, типа есть распространенная методика встраиванья питон-либ

Snusmumriken
03.05.2018
07:15:16

Vadim
03.05.2018
07:15:30

Насибуллин
03.05.2018
07:15:31
а, ффи у вас не только на Си распространяется?

Snusmumriken
03.05.2018
07:15:53

Насибуллин
03.05.2018
07:16:12
а для ффи типа интерпретатор не нужен?

Vadim
03.05.2018
07:16:56

Насибуллин
03.05.2018
07:17:27
при чём тут Си-Не-Си? ffi - позволяет загрузить библиотеку
так а если либа это .pyc файл?

Vadim
03.05.2018
07:17:45
.pyc файл это не библиотека

Snusmumriken
03.05.2018
07:17:49

Насибуллин
03.05.2018
07:17:54
а, понял

Vadim
03.05.2018
07:17:58
это скомпилированный в питонобайткод питоноскрипт

Насибуллин
03.05.2018
07:19:15
интересно, а если питон скомпилировать с флагом -rdynamic то ффи больше функций оттуда увидит?
а, хотя это не шаред обжект хз

Alexander
03.05.2018
07:19:40
какой ffi?
так разве оно не вызывает код c через ffi?
http://luajit.org/ext_ffi.html
The FFI library allows calling external C functions and using C data structures from pure Lua code.

Yura
03.05.2018
07:21:52
Доброе утро.
Не силен в луа, кто может подсказать, что происходит на 177 стр? - https://github.com/diegonehab/luasocket/blob/master/src/http.lua

Snusmumriken
03.05.2018
07:22:07

Alexander
03.05.2018
07:22:09
меня беспокоит overhead на то чтобы запускать C из Lua

Google

Snusmumriken
03.05.2018
07:22:16

Alexander
03.05.2018
07:24:38
То есть, например если я запускаю сишную функцию из файбера tarantool (почти как корутина), то не происходит смена контекста и небольшой lock главного треда?

Snusmumriken
03.05.2018
07:25:19
Хех, корутины не дают тебе многопоточности : )
Все локи луёвых или сишных функций - всё равно локи.
Когда ты делаешь:
str = io.open('file.txt'):read('*all') - ты блокируешь исполнение, пока файл не будет прочитан, а если файл недоступен или диск в бедблоках - оно может довольно долго читать и долго блокировать.
И кстати, луашный io.open() - это прямая связка с сишным io. Дёргая это ты дёргаешь функции из стандартной сишной либы.

Alexander
03.05.2018
07:27:40
Многое проясняется :) тогда зачем ffi?
The FFI library allows calling external C functions

Snusmumriken
03.05.2018
07:27:47
См выше.

Vadim
03.05.2018
07:28:15

Snusmumriken
03.05.2018
07:34:13
Многое проясняется :) тогда зачем ffi?
Вот так выглядит библиотека, которая компилируется в dll/so-либу, которую жуёт любая версия Lua, хоть с ffi хоть без.
https://github.com/starwing/luautf8/blob/master/lutf8lib.c
Написана по данной технологии:
https://www.lua.org/pil/26.2.html
А вот так написана типичная сишная библиотека. Что-то не видно никаких манипуляций с луа-стеком, да и вообще ничего в луа не выгружается! Как так? Как её подключать? Что с ней делать?
https://github.com/carterjones/hello-world-dll/blob/master/hello-world.cpp
Вариантов два:
1. Переписывать под адаптацию к Lua.
2. Если в проекте используется luajit, воспользоваться грязным ffi-хаком и подрубить напрямую. Все symbol'ы будут выдраны, все конверсии произведены автоматически.

Насибуллин
03.05.2018
07:35:01
Пока в коде библиотеки не встретится __stdcall
:)

Snusmumriken
03.05.2018
07:36:14
Ну такое. Адаптировать нужно будет чуть больше, только и всего.

Насибуллин
03.05.2018
07:42:51
Концепция ффи насколько я помню пришла из лиспов/смл. Там как раз для этой цели использовали
но везде был один ABI - юникс сис 5
сдекл по современному

Snusmumriken
03.05.2018
07:44:13
Это избыточная информация даже для меня : )

Насибуллин
03.05.2018
07:44:29
лiл)

Alexander
03.05.2018
07:50:33


Насибуллин
03.05.2018
07:51:26
когда можно сделать маллок, записать туда данные и вернуть указатель?
этим занимается сама либа

Google

Насибуллин
03.05.2018
07:51:41
а чтобы "вернуть" как минимум уже надо класть на луашный стек
если он отличается чем то от колстека

Snusmumriken
03.05.2018
07:53:01
Это если бы мы были в мире сишки.
А луашка хочет чтобы сишка взяла луа-строчку и доп-аргументы, провернула с ней какие-то манипуляции и вернула бы в стек.
Пользование этой либой выглядит так:
utf8 = require'lua-utf8'
newstr = utf8.sub('Текст на русском с жопными символами длиной больше одного байта ▼▲▼▲▼', 2, -3)
То есть, в луа должна быть выгружена сишная функция sub, которая вытаскивает cchar * переданный первым аргументом, вытаскивает int'ы переданные вторым и третьим, делает с ними грязь и выплёвывает обратно в луа.

Alexander
03.05.2018
08:02:49
а почему ffi - это грязный хак? Он дает большой overhead?

Snusmumriken
03.05.2018
08:06:25
Потому что это нормально работает только в одном месте: в luajit.
Ffi-биндинг или либа на ffi-методах (использующая сишные структуры, например) не работает в lua 5.1-5.4 потому что там нет ffi, а они сами довольно активно используются много где. Поэтому она почти одноразовая или "для избранных" у которых оно есть. Поэтому lua-сообщество слегка разделено на два лагеря.

Alexey
03.05.2018
08:09:05

Snusmumriken
03.05.2018
08:09:37

Alexey
03.05.2018
08:09:56
Ну и есть luaffi правда он помедленнее чем просто lua :(

Snusmumriken
03.05.2018
08:10:21
Потому что там как раз оверхед, это не "встроенное в язык решение" а надстройка. Такая же как в ноде или питоне. Там тоже есть подобное счастье. Не настолько вырвиглазно магически-крутое, но тем не менее.

Насибуллин
03.05.2018
08:11:50
когда контроля надо сорсами нет, можно применить
но вообще лучше написать биндинг

Alexey
03.05.2018
08:12:19

Насибуллин
03.05.2018
08:12:23
в какой лагерь я попал? :)

Snusmumriken
03.05.2018
08:12:29

Alexey
03.05.2018
08:13:25
У luv вроде тоже есть подобное
Ну о реализовать такое не сложно на любой библиотеки