Перейти 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>
Я делаю что-то не так? Может ли кто-нибудь помочь мне с этим?