我需要对我的服务器进行异步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 socket asynchronous calls并没有帮助我,因为它仍然会等待转移的开始,然后再启动另一个。
答案 0 :(得分:5)
类似于Luvit?
Luvit试图通过使用nodeJS非常棒来做一些疯狂的尝试 架构和依赖关系,看看它如何适应Lua 语言。
这个项目仍在大力发展,但它正在展示 诺言。在使用hello world服务器进行初始基准测试时,这是 比nodeJS快2到4倍。
答案 1 :(得分:1)
我能够使用https://github.com/Neopallium/lua-llthreads来做到这一点 这似乎适用于iOS和Android平台。