http.TIMEOUT在lua中不起作用

http.TIMEOUT在lua中不起作用,http,lua,timeout,connection-timeout,luasocket,Http,Lua,Timeout,Connection Timeout,Luasocket,我正在做一个长轮询请求,设置了10秒的超时时间,但它似乎不起作用。我的理解是,如果我们没有在指定的超时内从后端得到响应,后端调用应该以timedout错误代码结束。是这样吗 但是如果我使用一个非常小的超时,例如0.001,它就可以工作。所以我认为,如果请求已经发送到后端,超时就不起作用 对于我的长轮询请求,如果在发送请求并等待响应时我的网络关闭,lua套接字将挂在那里,并且它永远不会从这种情况中恢复。如果我能以其他方式处理这件事,你能帮我吗 我的Lua版本-Lua 5.1.4版权所有C 1994

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

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

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

我的Lua版本-Lua 5.1.4版权所有C 1994-2008 Lua.org,PUC Rio double int32

代码Spinet:

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解析。那么,超时对我有效。
另一个有助于解决问题的选项是为连接创建一个过期线程。

您使用的是https.request而不是http.requestYes,这是正确的。在下面的另一个线程中,它说http.TIMEOUT也应该用于https请求。