2011-12-27 4 views
2

Мне нужно сделать асинхронный HTTP-вызов на моем сервере, чтобы получить ответ XML. После того, как я получу ответ, я вызову функцию [ранее указанного], если это успех или какая-либо другая функция, если это ошибка.Как сделать асинхронный HTTP-вызов с обратным вызовом в Lua?

Так что, о чем я думал, в первую очередь были сопрограммы. К сожалению, после того, как я сделаю вызов http.get, я не могу уступить, так как он будет ждать завершения всего. Я знаю, что я могу использовать отдельные функции для чтения ответа, однако мне нужно подождать, по крайней мере, для первых байтов данных, чтобы эта функция была запущена, что позволило бы мне уступить. Во всяком случае, за то, что я сделал, используя сопрограммы, не похоже на то, как идти.

Затем я попытался вызвать функцию C из lua, создав отдельный поток, чтобы получить XML, а затем вызвать функцию в Lua, однако это не работает из-за изменения lua_state после создания нового потока. Перед созданием потока я могу видеть 3 параметра в стеке, и после создания нового потока [я передаю lua_State в качестве аргумента] он имеет только один. Во всяком случае, из того, что я понимаю, lua_State будет закрыт после завершения вызова функции cfunction, поэтому я не смогу перезвонить.

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

История этой проблемы: Я портирую свою игру из C-Cocos2D объектной рамки C в рамки Cocos2d-X C++. Я хочу использовать привязки Lua, поскольку я думаю, что не удастся перенести его на C++. В любом случае, я хочу сделать это в Луа. Итак, у меня есть сцена, где кто-то обращается к списку инвентаря, который у них есть в игре. Если ответ будет немедленным, они в основном откроют окно, открытое списком инвентаря. Тем не менее, если для получения данных потребуется немного больше времени, проблемы с подключением, отключить перегрузку ... независимо от того, какой экран будет исчезать, а на экране будет отображаться анимация, указывающая передачу данных. По крайней мере, так оно работает на версии игры objc, и я хочу то же самое.

Есть ли что-то, что я пропустил во время своих исследований, возможно ли это сделать?

BTW Я видел Lua socket asynchronous calls, и это не помогает мне, потому что он все еще ждет начала передачи, прежде чем он начнет другой.

ответ

5

Нечто вроде Luvit?

Luvit это попытка сделать что-то сумасшедшее, принимая nodeJS является удивительным архитектуры и зависимости и, видя, как он подходит на языке Lua .

Этот проект по-прежнему находится в тяжелом развитии, но он показывает обещание. При первоначальном бенчмаркинге с сервером hello world это между 2 и 4 раза быстрее, чем nodeJS.

+0

Привет, к сожалению, мне нужно что-то, что будет работать на iOS и Android. К сожалению, я не могу использовать luaJit для создания приложений для iOS :( – Krystian