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