@ProLua

Страница 282 из 307
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 секунд выставлен.

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
@korevikov а посоветовать вместо этого импользовать Lua-cURL будет совсем неподходящим? :)
Спасибо за вариант, если все будет плохо попробую эту либу

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
в четвёртых, в гугле первой же строкой: https://github.com/doujiang24/lua-resty-kafka
Ну вот это узкоспециализированно под openresty, ни о каких универсальных луасокетах речи не идёт. Но несложно это исправить : )

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?

Насибуллин
03.05.2018
07:09:27
Ну, пока не попробуешь - не узнаешь

Кстати что такое питон-биндинги в контексте луа программирования?

Alexander
03.05.2018
07:09:54
1) кто "он"? 2) что такое "необычный" LuaJIT?
пакет. необычный - тот что в openresty :)

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

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

это типа у луа есть особые методы вступать в отношения с питоном?
Питон циклически вращается в космическом пространстве и каждое утро пожирает луну, но за день рождается новая.

Vadim
03.05.2018
07:11:28
пакет. необычный - тот что в openresty :)
в опенрести вполне обычный luajit, но первый пакет зависит от lua nginx module (использует функции из таблицы ngx)

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
а я думал питон как то можно типа встроить в луа программу
Можно но дорого и не нужно. Как раз с ffi - можно на лету. Но опять таки, есть луа, зачем питон сверху?

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

Snusmumriken
03.05.2018
07:15:53
io.popen("python moo.py")
Это если отдельно стоит интерпретатор.

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

Vadim
03.05.2018
07:16:56
а, ффи у вас не только на Си распространяется?
при чём тут Си-Не-Си? ffi - позволяет загрузить библиотеку. А потом в c-like виде объявить заголовки. После чего уже можешь на Lua писать. Но зачем питон это не объясняет

а для ффи типа интерпретатор не нужен?
он имел в виду интерпретатор питона. А для ffi, да, он не нужен.

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

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

Snusmumriken
03.05.2018
07:17:49
а, ффи у вас не только на Си распространяется?
Cpython можно динамически через ffi подключить как либу и гонять на ней скрипты. Проблемы?

Насибуллин
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
так разве оно не вызывает код 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.
FFI нужен только для очень определённых вещей, тебе о них на текущем уровне знать не обязательно. Луа (без FFI) спокойно жуёт сишные библиотеки написанные для неё (подключанная Lualib и DLLExport с массивом луашных функций). И есть множество библиотек, расширяющих стандартный функционал луёв. Например, добавляющие сеть (luasocket) или utf8 или json (cjson) или ещё миллиард мелочей. FFI нужен для того чтобы подключить к луа сишную библиотеку, которая не предназначена для луа.

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

Google
Snusmumriken
03.05.2018
07:22:16
меня беспокоит overhead на то чтобы запускать C из Lua
0. Оверхед такой же как на вызов луашных функций. Они ВСЕ сишные (даже те которые ты написал на луа, после разогрева, в варианте с ffi).

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
The FFI library allows calling external C functions
для использования библиотек ОС, для которых нет готовых модулей-прокладок для Lua

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
Вот так выглядит библиотека, которая компилируется в 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'ы будут выдраны, все конверсии произведены автоматически.
Немного не понимаю зачем нужны всякие манипуляции с lua-стеком? Вот есть библиотека lua-utf8 и функция utf8.upper она на вход принимает указатель на память, считывает и возвращает другой указатель. Зачем здесь манипуляции с lua-стеком, когда можно сделать маллок, записать туда данные и вернуть другой указатель?

Насибуллин
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-сообщество слегка разделено на два лагеря.

Snusmumriken
03.05.2018
08:09:37
Ну можно эмулировать с помощью асинхронных библиотек
Ты видел где-нибудь асинхронный io.read в виде библиотек? Я - нет.

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
Ты видел где-нибудь асинхронный io.read в виде библиотек? Я - нет.
Я да :) https://github.com/moteus/lua-lluv/blob/master/src/lua/lluv/cofs.lua

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

Snusmumriken
03.05.2018
08:12:29
Alexey
03.05.2018
08:13:25
У luv вроде тоже есть подобное

Ну о реализовать такое не сложно на любой библиотеки

Страница 282 из 307