如何在Lua中使用回调进行异步HTTP调用?

Kry*_*ian 2 lua multithreading pthreads coroutine cocos2d-x

我需要对我的服务器进行异步HTTP调用才能接收XML响应.在我得到响应之后,如果成功则会调用[先前指定的]函数,如果是错误则调用其他函数.

所以我首先想到的是协同程序.不幸的是,在我进行http.get调用后,我无法屈服,因为它会等待整个事情完成.我知道我可以使用单独的函数来读取响应,但是我必须至少等待数据的第一个字节才能触发此函数,这将允许我屈服.无论如何,因为使用协同程序我想做的事情看起来不像是要走的路.

然后我尝试从lua调用一个C函数,创建单独的线程来获取XML,然后在Lua中调用一个函数,但是这不起作用,因为在创建新线程后lua_state会发生变化.在创建线程之前,我可以在堆栈上看到3个参数,并且在创建新线程后[我传递lua_State作为参数]它只有一个.无论如何,根据我的理解,一旦原始的cfunction调用结束,lua_State将被关闭,所以我将无法回拨.

因为我刚开始使用lua而且我对lua到c绑定更不熟悉,所以我只能希望我犯了一些愚蠢的错误,这很容易解决.但是现在我不知道如何进一步发展.

这个问题背后的故事:我将我的游戏从Cocos2D目标C框架移植到Cocos2d-X C++框架.我想使用Lua绑定,因为我认为我将无法将其移植到C++.无论如何,我想在Lua做.所以我有一个场景,有人访问他们在游戏中的库存清单.如果响应是立即的,他们基本上会看到一个打开的窗口,其中包含库存清单.但是,如果需要更长的时间来获取数据[连接问题,服务器过载......无论如何]屏幕将淡出,并且一些表示数据传输的动画将显示在屏幕上.至少这是它如何在游戏的objc版本上工作,我想要同样的事情.

在我的研究中是否有我遗漏的东西,是否有可能做到这一点?

BTW我已经看到了Lua套接字异步调用,它对我没有帮助,因为它仍然会等待转移的开始,然后再启动另一个.

Cle*_* J. 5

鲁维特之类的东西

Luvit尝试通过获取nodeJS的令人敬畏的架构和依赖关系,并了解它如何适应Lua语言,尝试做一些疯狂的事情.

该项目仍在大力发展,但它显示出了希望.在使用hello world服务器进行初始基准测试时,这比nodeJS快2到4倍.