आप ऐसा कर सकते हैं पूरे 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
की तरह वैश्विक सेटिंग्स, एक सेट अनुरोध अनुरोध के भीतर किसी भी व्यक्तिगत ऑपरेशन के लिए समय सीमा - दूसरे शब्दों में, ऑपरेशन बिना किसी गतिविधि के बिना किसी गतिविधि के जा सकता है। यदि आप एक ऑपरेशन पर समग्र ऊपरी बाउंड सेट करना चाहते हैं - एक समय जब कुल अनुरोध पार नहीं हो सकता है, गतिविधि पर ध्यान दिए बिना - आपको के :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, 't')
साथ: req_sock:settimeout(5, 'b')
(या बस req_sock:settimeout(5)
) एक 5 सेकंड ब्लॉक समाप्ति सेट करने के साथ, इस अनुरोध को ठीक आगे बढ़ना होगा अंतर्निहित आई/ओ संचालन पाँच सेकंड से अधिक समय लगा से कोई भी रूप में, कुल टाइमआउट, अनुरोध पांच सेकंड के बाद विफल हो जाएगा।
बेशक
, यह इन दोनों अवधियों वाले के लिए प्रतिबंध सेट बनाना उचित है, दोनों एक छोटी निष्क्रियता टाइमआउट के साथ-साथ एक लंबे समय तक समग्र टाइमआउट हो रही है। के रूप में इस तरह के, 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}
अपना समाधान एक उत्तर के रूप में जोड़ें और इसे स्वीकार करें, इसलिए यह प्रश्न पूरा हो जाएगा। –
मैंने कोशिश की लेकिन मुझे अपने स्वयं के प्रश्न का उत्तर देने से पहले मुझे पहले पोस्ट के 8 घंटे बाद इंतजार करना होगा। मैं इसे शाम (सीईटी) करूँगा। – ripat
यह प्रतिबंध अब जाना चाहिए कि आपके पास 10 से अधिक प्रतिनिधि अंक हैं। – BMitch