lua http套接字超时

时间:2011-05-16 10:31:54

标签: sockets lua luasocket

LuaSocket HTTP模块文档说明可以在HTTP连接上设置超时:

可以设置以下常量来控制HTTP模块的默认行为:

PORT:用于连接的默认端口; PROXY:用于连接的默认代理; TIMEOUT:设置所有I / O操作的超时; USERAGENT:向服务器报告的默认用户代理。 http://w3.impa.br/~diego/software/luasocket/http.htm

如何在lua脚本中设置这些常量?

2 个答案:

答案 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')