加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

套接字 – lua http套接字超时

发布时间:2020-12-15 00:25:14 所属栏目:大数据 来源:网络整理
导读:LuaSocket HTTP模块文档说可以在HTTP连接上设置超时: 可以设置以下常量来控制HTTP模块的默认行为: PORT:用于连接的默认端口; PROXY:用于连接的默认代理; TIMEOUT:设置所有I / O操作的超时; USERAGENT:向服务器报告的默认用户代理. http://w3.impa.br/~
LuaSocket HTTP模块文档说可以在HTTP连接上设置超时:

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

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

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

解决方法

您可以这样做为一个请求而不是整个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等全局设置为请求中的任何单个操作设置了时间限制 – 换句话说,它是在超时之前可以在没有任何活动的情况下运行多长时间.如果你想设置一个操作的整体上限 – 整个请求不能超过的时间,无论活动如何 – 你应该将’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操作花费超过五秒:但是,使用req_sock:settimeout(5,’t’)设置五秒总超时,请求将在五秒后失败.

当然,为这两个持续时间设置限制可能是有意义的,同时具有短暂的不活动超时以及更长的总超时.因此,per the documentation,您可以进行两次单独调用以指定两者:

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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读