Para ello, puede establecer un tiempo de espera para una solicitud en lugar de todo el módulo 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}
Tenga en cuenta que el comportamiento predeterminado de :settimeout
, así como la configuración global como http.TIMEOUT
, establece una límite de tiempo para cualquier operación individual dentro de la solicitud - en otras palabras, es cuánto tiempo la operación puede ir sin ninguna actividad antes de que se agote el tiempo de espera. Si desea establecer un límite superior general en una operación - una vez que la solicitud global no puede exceder, independientemente de la actividad - debe pasar un argumento de modo de 't'
como el segundo parámetro a :settimeout
, como sigue:
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}
Como ejemplo para ilustrar la distinción entre los dos modos, imaginemos que, después de hacer su solicitud, el servidor responde con un trozo de la respuesta de una vez por segundo, teniendo siete segundos para completar global. Con req_sock:settimeout(5, 'b')
(o simplemente req_sock:settimeout(5)
) el establecimiento de un 5 segundos bloque tiempo de espera, esta solicitud se procedería muy bien, ya que ninguno de los operaciones subyacentes de E/S tomó más tiempo de cinco segundos: Sin embargo, la req_sock:settimeout(5, 't')
establecimiento de cinco segundos total tiempo de espera, la solicitud sería error después de cinco segundos.
Por supuesto, puede tener sentido para establecer restricciones para tanto de estas duraciones, que tiene tanto un corto tiempo de espera inactividad, así como una larga general tiempo de espera. Como tal, per the documentation, puede hacer dos llamadas separadas para especificar tanto :
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}
Agregue su solución como respuesta y acéptela, por lo que esta pregunta estaría completa. –
Lo intenté, pero tengo que esperar 8 horas después de la primera publicación para poder responder a mi propia pregunta. Lo haré esta tarde (CET). – ripat
Esa restricción debería desaparecer ahora que tiene más de 10 puntos de repetición. – BMitch