我'm doing a long poll request setting a timeout of 10 sec but it does not seem to be working. My understanding is if we don' t在指定的超时内从后端获得响应,后端调用应以 timedout
错误代码结束 . 是这样吗?
但如果我使用非常小的超时,例如0.001,它的工作原理 . 所以我认为如果请求已经发送到后端,则超时不起作用 .
对于我的长轮询请求,如果我的网络在发送请求并等待响应时关闭,则lua套接字挂起并且它永远不会从该情况中恢复 . 如果我能以任何其他方式处理这件事,你能帮助我吗?
我的Lua版本 - Lua 5.1.4版权所有(C)1994-2008 Lua.org,PUC-Rio(双int32)
Code 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
}
})
1 回答
我也遇到了使https连接工作超时的问题 . 将超时设置为
http.TIMEOUT = ...
是正确的事情,即使对于https(在使用非常小的超时时确认) .就我而言,DNS解析是罪魁祸首 . 这似乎是在没有来自lua端的强制超时的情况下同步发生,并且只有在系统调用
getaddrinfo
(或内部使用的任何luasec)返回时才会超时 .对我来说,解决方法是使用IP而不是主机名来绕过DNS解析 . 那时超时对我有用 . 另一个可以帮助您解决问题的方法是为连接创建一个到期时间的线程 .