2013-07-17 94 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