【问题标题】:How to make asynchronous HTTP call with callback in Lua?如何在 Lua 中使用回调进行异步 HTTP 调用?
【发布时间】:2012-01-28 17:31:36
【问题描述】:

为了接收 XML 响应,我需要对我的服务器进行异步 HTTP 调用。 收到响应后,如果成功,我将调用 [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 socket asynchronous calls,但它对我没有帮助,因为它仍在等待传输开始,然后才会开始另一个传输。

【问题讨论】:

    标签: multithreading lua pthreads coroutine cocos2d-x


    【解决方案1】:

    类似Luvit 的东西?

    Luvit 试图通过采用 nodeJS 的真棒来做一些疯狂的事情 架构和依赖关系,看看它如何适应 Lua 语言。

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

    【讨论】:

    • 嗨,不幸的是,我需要可以在 iOS 和 Android 上运行的东西。不幸的是,我不能使用 luaJit 来构建 iOS 应用程序 :(
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 2018-05-21
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多