golang timeout的问题

需求:
golang实现proxy来做到前端请求某个url后落到proxy上,proxy再发起请求到backend server, 然后为了性能问题, 我需要考虑超时后放弃后端返回,以及提醒http client超时(504)

我的思路:
因为整个程序用到了gin以及golang http包的reverseProxy,所以我优先考虑gin的http.server参数: readtimeout, writetimeout,
为此我写了一段代码如下:

package main  
  
import (  
   "github.com/gin-gonic/gin"  
   "net/http" "time"
 )  
  
func main() {  
   e := gin.New()  
   e.GET("/", func(context *gin.Context) {  
      time.Sleep(time.Second * 5)  
      context.String(300, "ssss")  
   })  
   srv := http.Server{  
      Addr: ":8888",  
      Handler: e,  
      ReadTimeout: 3 * time.Second,  
      WriteTimeout: 3 * time.Second,  
   }  
   //http.TimeoutHandler(e, time.Second * 1, "msg")  
  srv.ListenAndServe()  
  
}

另我意外的是: 我请求: http://localhost:8888 后浏览器卡了10s,返回ERR_EMPTY_RESPONSE, 同时奇怪的又自主发起了一次请求,然后还是10s无结果

我的预期结果是: http server 3s无结果writer,则超时,浏览器应该也是超时停止请求,并拿到504

所以请教下大佬们,那里出了问题

阅读 8.6k
2 个回答

writeTimeout 超时会导致服务器内部返回结果的时候(response.Write())不能正常写回数据,但是不会导致引起整个请求 504 ,也不会在“超时”之后终止连接。

你这个前端设置timeout了?
超时应该是前端设置的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题