分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

golang http.client 遇到了 Connection reset by peer 问题

发布时间:2023-09-06 02:34责任编辑:熊小新关键词:http

最近一个 golang 写的 http.client 的,获取远程服务器数据,有时候会报错,尤其在数量很大的时候,老是收到 Connection reset by peer 这样的 提醒,都有点想用重试机制

百度,goolge 了一翻后,说的是 它会阻止连接被重用,可以有效的防止这个问题,也就是Http的短连接

1.在客户端关闭 http 连接

func main() { ???req, err := http.NewRequest("GET", "http://localhost",nil ) ???if err != nil { ???????log.Errorf("") ???} ???req.Close = true ???resp, err := http.Client.Do(req) ???...}

  

  1. 在头部设置连接状态为关闭
    func main() { ???req, err := http.NewRequest("GET", "http://localhost",nil ) ???if err != nil { ???????log.Errorf("") ???} ???req.Header.Add("Connection", "close") ???resp, err := http.Client.Do(req) ???...}
    1. 使用 Transport 取消 HTTP利用连接
      func main() { ???tr := http.Transport{DisableKeepAlives: true} ???client := http.Client{Transport: &tr} ???resp, err := client.Get("https://golang.google.cn/") ???if resp != nil { ???????defer resp.Body.Close() ???} ???checkError(err) ???fmt.Println(resp.StatusCode) ???// 200 ???body, err := ioutil.ReadAll(resp.Body) ???checkError(err) ???fmt.Println(len(string(body)))}

        

      服务器端设置短连接

    2. func main(){ ???server := &http.Server{Handler:handle,ReadTimeout: ?20 * time.Second,WriteTimeout: 20 * time.Second,}listen, err := net.Listen("tcp4",s.addr)if err != nil ?{logger.Errorf("Failed to listen,err:%s",err.Error())panic(err)}server.SetKeepAlivesEnabled(false)err = server.Serve(listen)}

        

    参考 了

  2. https://blog.csdn.net/cyberspecter/article/details/83308348  

  3. https://my.oschina.net/shou1156226/blog/808613

golang http.client 遇到了 Connection reset by peer 问题

原文地址:https://www.cnblogs.com/jackluo/p/10452026.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved