go http客户端在多次请求后失败

go http客户端在多次请求后失败,http,ssl,go,httprequest,handshake,Http,Ssl,Go,Httprequest,Handshake,我正在应用程序中使用golang的net/http包。在我的用例中,我尝试使用我的自定义http客户机连续多次进行http调用。我在这方面面临以下问题 问题1:在多次调用[~100次,不到一分钟]之后,客户端无法进行调用。我的意思是请求没有击中服务器 这是我的自定义客户端代码 package serviceclient import ( "bytes" "io/ioutil" "net" "n

我正在应用程序中使用golang的net/http包。在我的用例中,我尝试使用我的自定义http客户机连续多次进行http调用。我在这方面面临以下问题

问题1:在多次调用[~100次,不到一分钟]之后,客户端无法进行调用。我的意思是请求没有击中服务器

这是我的自定义客户端代码

package serviceclient

import (
    "bytes"
    "io/ioutil"
    "net"
    "net/http"
    "time"
    "log"
)

const(
    HTTP_DIAL_TIME_OUT          = 5    //seconds
    HTTP_TLS_HANDSHAKE_TIME_OUT = 5
    HTTP_CLIENT_TIME_OUT        = 10
)

// RequestService requests the api through the service URL
func RequestService(methodType string, serviceURL string, data string, contentType string) string {
    log.Printf("Request string %s", data)
    dataBytes := bytes.NewBufferString(data)
    req, err := http.NewRequest(methodType, serviceURL, dataBytes)
    if err != nil {
        log.Printf("Client request creation issue")
    }
    req.Header.Set("Content-Type", contentType)

    client := getHTTPClient()
    res, err := client.Do(req)
    log.Printf("Response Object original : %s", res)
    if err != nil {
        log.Printf("Could not make the client request")
    }
    defer res.Body.Close()
    responseBytes, err := ioutil.ReadAll(res.Body)
    if err != nil {
        log.Printf("Response string conversion issue")
    }
    responseString := string(responseBytes[:])
    return responseString
}

func getHTTPClient() *http.Client {
    var netTransport = &http.Transport{
          Dial: (&net.Dialer{
            Timeout: HTTP_DIAL_TIME_OUT * time.Second,
          }).Dial,
          TLSHandshakeTimeout: HTTP_TLS_HANDSHAKE_TIME_OUT * time.Second,
        }
    var client = &http.Client{
          Timeout: time.Second * HTTP_CLIENT_TIME_OUT,
          Transport: netTransport,
        }
    return client
}
问题2:即使在成功响应空请求[而不是原始请求]之后,客户机每次尝试拨打电话时也是如此。我的意思是,当我调用RequestService()函数时,即使在获得成功响应后,它也会进行5次额外调用。但是对于这些调用,
request
值是
undefined

这是我的控制台输出[我打印了http请求和少量信息],用于一个http调用

Got in appserver ops api  &{GET /api/services/appserverops/ HTTP/1.1 1 1 map[Content-Type:[application/json] Accept-Encoding:[gzip] User-Agent:[Go-http-client/1.1] Content-Length:[160]] 0xc820398180 160 [] false localhost:8081 map[] map[] <nil> map[] [::1]:57455 /api/services/appserverops/ <nil> <nil>}
appserveropslogic :: Getappserver() :: request Wg
appserveropslogic :: Getappserver() :: response &{{127 https://www.youtube.com/watch?v=0SMoqP9eCwM https://www.youtube.com/embed/0SMoqP9eCwM 1} {44 www.github.com/docker 1} 2016-04-09 05:38:32 {} 2016-04-09 05:38:32 [0xc82000c4c0 0xc8200d4da0 0xc82000c600] {1005   0 0    0    []} false}

Got in appserver ops api  &{GET /api/services/appserverops/ HTTP/1.1 1 1 map[User-Agent:[Go-http-client/1.1] Content-Length:[167] Content-Type:[application/json] Accept-Encoding:[gzip]] 0xc8203f4800 167 [] false localhost:8081 map[] map[] <nil> map[] [::1]:57455 /api/services/appserverops/ <nil> <nil>}
appserveropslogic :: Getappserver() :: request undefined
appserveropslogic :: Getappserver() :: response <nil>

Got in appserver ops api  &{GET /api/services/appserverops/ HTTP/1.1 1 1 map[User-Agent:[Go-http-client/1.1] Content-Length:[167] Content-Type:[application/json] Accept-Encoding:[gzip]] 0xc8203f4880 167 [] false localhost:8081 map[] map[] <nil> map[] [::1]:57455 /api/services/appserverops/ <nil> <nil>}
appserveropslogic :: Getappserver() :: request undefined
appserveropslogic :: Getappserver() :: response <nil>

Got in appserver ops api  &{GET /api/services/appserverops/ HTTP/1.1 1 1 map[User-Agent:[Go-http-client/1.1] Content-Length:[167] Content-Type:[application/json] Accept-Encoding:[gzip]] 0xc8203f49c0 167 [] false localhost:8081 map[] map[] <nil> map[] [::1]:57455 /api/services/appserverops/ <nil> <nil>}
appserveropslogic :: Getappserver() :: request undefined
appserveropslogic :: Getappserver() :: response <nil>

Got in appserver ops api  &{GET /api/services/appserverops/ HTTP/1.1 1 1 map[User-Agent:[Go-http-client/1.1] Content-Length:[167] Content-Type:[application/json] Accept-Encoding:[gzip]] 0xc8203f4a40 167 [] false localhost:8081 map[] map[] <nil> map[] [::1]:57455 /api/services/appserverops/ <nil> <nil>}
appserveropslogic :: Getappserver() :: request undefined
appserveropslogic :: Getappserver() :: response <nil>

Got in appserver ops api  &{GET /api/services/appserverops/ HTTP/1.1 1 1 map[User-Agent:[Go-http-client/1.1] Content-Length:[167] Content-Type:[application/json] Accept-Encoding:[gzip]] 0xc8203f4b00 167 [] false localhost:8081 map[] map[] <nil> map[] [::1]:57455 /api/services/appserverops/ <nil> <nil>}
appserveropslogic :: Getappserver() :: request undefined
appserveropslogic :: Getappserver() :: response <nil>

Got in appserver ops api  &{GET /api/services/appserverops/ HTTP/1.1 1 1 map[User-Agent:[Go-http-client/1.1] Content-Length:[167] Content-Type:[application/json] Accept-Encoding:[gzip]] 0xc8203f4c00 167 [] false localhost:8081 map[] map[] <nil> map[] [::1]:57455 /api/services/appserverops/ <nil> <nil>}
appserveropslogic :: Getappserver() :: request undefined
appserveropslogic :: Getappserver() :: response <nil>

Got in appserver ops api  &{GET /api/services/appserverops/ HTTP/1.1 1 1 map[User-Agent:[Go-http-client/1.1] Content-Length:[167] Content-Type:[application/json] Accept-Encoding:[gzip]] 0xc8203f4c80 167 [] false localhost:8081 map[] map[] <nil> map[] [::1]:57455 /api/services/appserverops/ <nil> <nil>}
appserveropslogic :: Getappserver() :: request undefined
appserveropslogic :: Getappserver() :: response <nil>
GET-in-appserver-ops-api&{GET/api/services/appserverops/HTTP/1.1-map[内容类型:[application/json]接受编码:[gzip]用户代理:[Go-HTTP-client/1.1]内容长度:[160]]0xc820398180 160[]false-localhost:8081-map[]map[]map[][::1]:57455/api/services/appserverops/]
appserveropslogic::Getappserver()::请求工作组
appserveropslogic::Getappserver()::响应&{{127https://www.youtube.com/watch?v=0SMoqP9eCwM https://www.youtube.com/embed/0SMoqP9eCwM 1} {44 www.github.com/docker 1}2016-04-09 05:38:32{}2016-04-09 05:38:32[0xc82000c4c0 0xc8200d4da0 0xc82000c600]{100500[]}假}
进入appserver ops api&{GET/api/services/appserverops/HTTP/1.1映射[用户代理:[Go HTTP client/1.1]内容长度:[167]内容类型:[application/json]接受编码:[gzip]]0xc8203f4800 167[]假本地主机:8081映射[]映射[]映射[][::1]:57455/api/services/appserverops/}
appserveropslogic::Getappserver()::未定义请求
appserveropslogic::Getappserver()::响应
进入appserver ops api&{GET/api/services/appserverops/HTTP/1.1映射[用户代理:[Go HTTP client/1.1]内容长度:[167]内容类型:[application/json]接受编码:[gzip]]0xc8203f4880 167[]假本地主机:8081映射[]映射[]映射[][::1]:57455/api/services/appserverops/}
appserveropslogic::Getappserver()::未定义请求
appserveropslogic::Getappserver()::响应
进入appserver ops api&{GET/api/services/appserverops/HTTP/1.1映射[用户代理:[Go HTTP client/1.1]内容长度:[167]内容类型:[application/json]接受编码:[gzip]]0xC8203F49C0167[]假本地主机:8081映射[]映射[]映射[][::1]:57455/api/services/appserverops/}
appserveropslogic::Getappserver()::未定义请求
appserveropslogic::Getappserver()::响应
进入appserver ops api&{GET/api/services/appserverops/HTTP/1.1映射[用户代理:[Go HTTP client/1.1]内容长度:[167]内容类型:[application/json]接受编码:[gzip]]0xc8203f4a40 167[]假本地主机:8081映射[]映射[]映射[][::1]:57455/api/services/appserverops/]
appserveropslogic::Getappserver()::未定义请求
appserveropslogic::Getappserver()::响应
进入appserver ops api&{GET/api/services/appserverops/HTTP/1.1映射[用户代理:[Go HTTP client/1.1]内容长度:[167]内容类型:[application/json]接受编码:[gzip]]0xc8203f4b00 167[]假本地主机:8081映射[]映射[]映射[][::1]:57455/api/services/appserverops/}
appserveropslogic::Getappserver()::未定义请求
appserveropslogic::Getappserver()::响应
进入appserver ops api&{GET/api/services/appserverops/HTTP/1.1映射[用户代理:[Go HTTP client/1.1]内容长度:[167]内容类型:[application/json]接受编码:[gzip]]0xc8203f4c00 167[]假本地主机:8081映射[]映射[]映射[][::1]:57455/api/services/appserverops/}
appserveropslogic::Getappserver()::未定义请求
appserveropslogic::Getappserver()::响应
进入appserver ops api&{GET/api/services/appserverops/HTTP/1.1映射[用户代理:[Go HTTP client/1.1]内容长度:[167]内容类型:[application/json]接受编码:[gzip]]0xC8203F4C80167[]假本地主机:8081映射[]映射[]映射[][::1]:57455/api/services/appserverops/}
appserveropslogic::Getappserver()::未定义请求
appserveropslogic::Getappserver()::响应

我做错什么了吗?有人能帮我吗?

您的所有请求都应该使用一个http客户端。创建许多相同的客户机是没有意义的。只要超时相同,就使用相同的客户端。它可能会解决你的问题。客户端不是连接,它有内部连接池和缓存等。@not_A_Golfer-它帮助我解决了我猜的第一个问题[做了一个简单的测试]。我感谢你的帮助。但另一个问题仍然存在:(.我想是与默认重试有关的。我不确定“客户端”是什么意思。它可能更与数据字符串周围的缓冲区有关。@not_a_Golfer-我的意思是在调用RequestService()时)函数,即使在获得成功响应后,它也会进行5次额外调用。但是对于这些调用,
请求
值为
未定义
。您需要显示如何进行这5次额外调用