http.TIMEOUT在lua中不起作用



我正在做一个长轮询请求设置10秒的超时,但它似乎不工作。我的理解是,如果我们在指定的超时内没有从后端得到响应,后端调用应该以timedout错误代码结束。是这样吗?

但是如果我使用一个非常小的超时,例如0.001,它可以工作。所以我认为如果一个请求已经发送到后端,超时不起作用。

对于我的长轮询请求,如果我的网络在发送请求并等待响应时关闭,lua套接字挂在那里并且永远不会从这种情况中恢复。如果我能以其他方式处理这件事,你能帮助我吗?

版权所有(C) 1994-2008 Lua.org, pu - rio (double int32)

代码小型立式钢琴:

local http = require "socket.http"
local https = require "ssl.https"
http.TIMEOUT = 10
local r,s,h = https.request({
    url = url,
    method = "GET",
    sink = ltn12.sink.table(results),
    headers = {
        ["Cache-Control"] = "no-cache",
        ["X-Token"] = config.token
    }
})

我在获取https连接超时时也遇到了问题。将超时设置为http.TIMEOUT = ...是正确的做法,即使对于https(当使用非常小的超时时确认)。

在我的案例中,DNS解析是罪魁祸首。这似乎是同步发生的,没有从lua端强制超时,只有当系统调用getaddrinfo(或任何luasec内部使用)返回时才会超时。

我的一个解决方案是使用IP而不是主机名,以绕过DNS解析。那么暂停对我来说是有效的。另一个可以帮助解决问题的方法是为连接创建一个超时线程。

最新更新