2013-07-17 135 views
1

我想在golang中編寫一個web服務器來處理地理編碼請求。其中一些請求花費的時間超過一分鐘。在這種情況下,服務器似乎正在向客戶端返回一個空的主體,儘管處理程序一直運行。我試過下面的代碼無濟於事。我錯過了什麼嗎?這可能是pat的問題嗎?Golang HTTP服務器超時

r := pat.New() 

r.Get("/geocode", GeocodeHandler) 
r.Get("/status", StatusHandler) 
r.Get("/", InvalidHandler) 

s := &http.Server{ 
    Addr: ":"+port, 
    Handler: r, 
    ReadTimeout: 10 * time.Minute, 
    WriteTimeout: 10 * time.Minute, 
    MaxHeaderBytes: 0, 
} 

s.ListenAndServe() 

客戶端是紅寶石。我不認爲這是問題,因爲我看到類似的行爲,如果我使用捲曲。

uri = URI(URI.escape("http://blah.com/geocode?address=#{address}")) 
    http = Net::HTTP.new(uri.host, uri.port) 
    http.read_timeout = 10 * 60 
    response = http.request(Net::HTTP::Get.new(uri.request_uri)) 
+1

檢查您的客戶端是否超時。 – thwd

+0

在請求完成處理之前是否返回空體?或者處理完成,然後返回空體?這應該有希望表明超時是在服務器還是客戶端。 – Intermernet

+0

@Tom:如果我使用curl作爲客戶端,我遇到同樣的問題。不過我已經附上了ruby客戶端以供參考。 – MattyB

回答

1

發現此問題。我沒有提到我的服務器是在Amazon ELB的後面。其默認超時時間爲60秒。

+0

默認的HTTP超時時間一般爲2分鐘。 – tjameson

+0

亞馬遜剛剛添加了對配置超時的支持:https://aws.amazon.com/blogs/aws/elb-idle-timeout-control/ – Yousef