LuaSocket HTTP模块文档说明可以在HTTP连接上设置超时:
可以设置以下常量来控制HTTP模块的默认行为:
PORT:用于连接的默认端口; PROXY:用于连接的默认代理; TIMEOUT:设置所有I / O操作的超时; USERAGENT:向服务器报告的默认用户代理。 http://w3.impa.br/~diego/software/luasocket/http.htm
如何在lua脚本中设置这些常量?
答案 0 :(得分:12)
这比我想象的容易。简单地
local mysocket = require("socket.http")
mysocket.TIMEOUT = 5
答案 1 :(得分:6)
您可以这样做为一个请求而不是整个HTTP模块设置超时:
local socket = require "socket"
local http = require "socket.http"
response = http.request{url=URL, create=function()
local req_sock = socket.tcp()
req_sock:settimeout(5)
return req_sock
end}
请注意,:settimeout
的默认行为以及http.TIMEOUT
等全局设置会为请求中的任何单个操作设置的时间限制 - 换句话说,在超时之前,操作可以在没有任何活动的情况下运行多长时间。如果您希望在操作上设置整体上限 - 整个请求不能超过的时间,,无论活动 - 您应该传递模式参数{ {1}}作为't'
的第二个参数,如下所示:
:settimeout
作为一个例子来说明两种模式之间的区别,想象一下,在发出请求之后,服务器每秒响应一次响应,总共需要七秒钟才能完成。使用local socket = require "socket"
local http = require "socket.http"
response = http.request{url=URL, create=function()
local req_sock = socket.tcp()
-- note the second parameter here
req_sock:settimeout(5, 't')
return req_sock
end}
(或仅req_sock:settimeout(5, 'b')
)设置5秒块超时,此请求将继续正常,因为底层I / O操作< / em>花费的时间超过五秒:但是,如果req_sock:settimeout(5)
设置了五秒总超时,则请求将在五秒后失败。
当然,为这些持续时间的两者设置限制可能是有意义的,同时具有短不活动超时以及更长的整体超时。因此,per the documentation,您可以进行两次单独调用以指定两者:
req_sock:settimeout(5, 't')