1
我繼承了一些通過HTTP請求/響應與服務器通信的Lua代碼。這已經在現場運行了好幾年了,但我最近注意到系統中HTTP請求超時的一些掛起。每條消息都有能力定義自己的超時時間,但如果沒有設置,則使用30秒的默認超時時間。幾周前我在系統上注意到,在恢復並繼續處理之前,在超時時間約15分鐘之前發生了掛起。但我目前正在查看一個系統,在超過30秒的超時時間內掛了3個多小時。這裏是請求的設置:Lua HTTP請求超時掛起
local socket = require "socket"
local http = require "socket.http"
local ltn12 = require "ltn12"
local ssl = require "ssl"
local try = socket.try
local protect = socket.protect
...
function serverapi.http_request(request, timeout)
... (local variable setup and logging)
socket.TIMEOUT = timeout
socket.http.TIMEOUT = timeout
result, status_code, content = socket.http.request {
url = request.url,
method = request.method,
headers = request.header,
source = ltn12.source.string(request_body),
sink = ltn12.sink.table(response_body),
}
... (receive response and process)
我應該注意的是掛起在它們掛起的消息類型方面是不穩定的。所以這與一條消息不一致。而且,正如我所說,這已經在現場部署並運行了好幾年。
任何人有任何想法嗎?即使這只是一種幫助調試正在進行的方法。我甚至不知道如何在發送請求並等待超時之後獲取任何類型的日誌記錄。
感謝
掛鉤看起來像什麼?請求中的哪個地方掛?初始連接?發送請求?等待響應開始?等待響應結束? –
緊接在調用'socket.http.request'之前有一條日誌消息記錄了超時值,並且在打印接收到的狀態碼之後立即記錄一條日誌消息。所以必須在那個電話中掛。 – linsek
你可以捕捉wireshark的請求,然後回放,看看你是否得到相同的掛起?你可以附加一個調試器的過程? – Schollii