2

我需要对我的服务器进行异步 HTTP 调用以接收 XML 响应。收到响应后,如果成功,我将调用 [previously specified] 函数,如果是错误,我将调用其他函数。

所以我首先想到的是协程。不幸的是,在我进行 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 版本上的工作方式,我想要同样的东西。

我在研究过程中遗漏了什么,有可能做到吗?

顺便说一句,我见过Lua 套接字异步调用,它对我没有帮助,因为它仍然等待传输的开始,然后再开始另一个。

4

2 回答 2

5

Luvit这样的东西?

Luvit 试图通过采用 nodeJS 令人敬畏的架构和依赖项并查看它如何适合 Lua 语言来做一些疯狂的事情。

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

于 2011-12-27T19:55:04.483 回答
1

我可以使用https://github.com/Neopallium/lua-llthreads做到这一点 这似乎在 iOS 和 Android 平台上都可以正常工作。

于 2011-12-28T09:54:15.313 回答