10

LuaSocket HTTP モジュールのドキュメントには、HTTP 接続でタイムアウトを設定できると書かれています。

次の定数を設定して、HTTP モジュールのデフォルトの動作を制御できます。

PORT: 接続に使用されるデフォルトのポート。PROXY: 接続に使用されるデフォルトのプロキシ。TIMEOUT: すべての I/O 操作のタイムアウトを設定します。USERAGENT: サーバーに報告されるデフォルトのユーザー エージェント。 http://w3.impa.br/~diego/software/luasocket/http.htm

lua スクリプトでこれらの定数を設定するにはどうすればよいですか?

4

2 に答える 2

13

思ったより簡単でした。単に

local mysocket = require("socket.http")
mysocket.TIMEOUT = 5
于 2011-05-16T18:48:27.317 に答える
11

これを行うと、HTTPモジュール全体ではなく、1つのリクエストのタイムアウトを設定できます。

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の時間制限を設定することに注意してください。つまり、タイムアウトする前に操作がアクティビティなしで実行できる時間です。操作に全体的な上限を設定する場合(アクティビティに関係なく、全体的な要求が超えられない時間)、次のように、2番目のパラメーターとしての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}

2つのモードの違いを説明する例として、リクエストを行った後、サーバーが1秒に1回応答のチャンクで応答し、完了までに全体で7秒かかると想像してください。5秒のブロックタイムアウトを設定すると(または単に)、req_sock:settimeout(5, 'b')になるI / O操作のいずれも5秒より長くはかからなかったため、この要求は問題なく進行します。ただし、合計5秒のタイムアウトを設定すると、要求は失敗します。 5秒後。req_sock:settimeout(5)req_sock:settimeout(5, 't')

もちろん、これらの期間の両方に制限を設定して、非アクティブなタイムアウトを短くし、全体的なタイムアウトを長くすることは理にかなっています。そのため、ドキュメントに従って、 2つの別々の呼び出しを行って両方を指定できます。

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}
于 2011-05-16T18:35:37.293 に答える