在过去的 12 个小时里,我一直在研究这个主题,但我似乎无处可去。我什至不知道这是否可能,但我希望这是因为它对继续我的项目大有帮助。
我正在尝试做的是创建协程,因此我使用的特定程序不会因为无法执行异步 http 请求而冻结。尽管我对协程的理解还停留在“嗯?它是如何工作的?”中,但我已经想出了如何去做那部分。阶段。我现在的问题是能够使用正确的信息响应多个请求。例如,以下应产生三个单独的响应:
foo(a)
foo(b)
foo(c)
wherefoo
用里面的参数启动一个协程。如果全部单独请求,则返回正确的结果。但是,如果作为块请求,它只会返回foo(c)
's 结果。现在,我理解了这背后的原因,但我无法找到一种方法让它在作为一个块被请求时返回所有三个结果。为了帮助理解这个问题,这里是实际的代码:
function background_weather()
local loc = url.escape(querystring)
weatherpage = http.request("http://api.wunderground.com/api/004678614f27ceae/conditions/q/" .. loc .. ".json")
wresults = json.decode(weatherpage)
--process some stuff here, mainly datamining
end
--send datamined information as a response
coroutine.yield()
end
以及协程的创建:
function getweather ()
-- see if backgrounder running
if background_task == nil or
coroutine.status (background_task) == "dead" then
-- not running, create it
background_task = coroutine.create (background_weather)
-- make timer to keep it going
AddTimer ("tickler", 0, 0, 1, "",
timer_flag.Enabled + timer_flag.Replace,
"tickle_it")
end -- if
end -- function
该querystring
变量是使用初始请求设置的。我这里没有包含它,但是为了测试,12345
作为querystring
变量使用。计时器是脚本的原始作者初始化的东西,用于检查协程是否仍在运行,每秒戳一次背景直到完成。老实说,我什至不确定我是否正确地做到了这一点,尽管它似乎在程序中异步运行。
那么,是否可以在一个块中接收多个请求并正确返回多个响应?或者这对 Lua 来说是一项太多的任务吗?