Перейти http-клиент не работает после нескольких запросов

Я использую пакет 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>

Я делаю что-то не так? Может ли кто-нибудь помочь мне с этим?

0 ответов

Другие вопросы по тегам