Wiederverwenden von http-Verbindungen in Golang
Ich bin derzeit kämpfen, um einen Weg finden, um die Wiederverwendung von verbindungen, wenn das HTTP-posts in Golang.
Habe ich einen transport-und client-wie so:
//Create a new transport and HTTP client
tr := &http.Transport{}
client := &http.Client{Transport: tr}
Bin ich dann mit der Verabschiedung dieser client-Zeiger in eine goroutine, die macht, mehrere Beiträge zum gleichen Endpunkt wie folgt:
r, err := client.Post(url, "application/json", post)
Blick auf netstat dies scheint zu sein, was eine neue Verbindung für jeden post, resultierend in einer großen Anzahl von gleichzeitigen verbindungen öffnen.
Was ist der richtige Weg, um die Wiederverwendung von verbindungen in diesem Fall?
InformationsquelleAutor der Frage sicr | 2013-07-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie sicherstellen, dass Sie zu Lesen, bis die Reaktion abgeschlossen ist vor dem Aufruf
Close()
.z.B.
Sicherzustellen
http.Client
Verbindung wiederverwenden, werden Sie sicher zwei Dinge zu tun:ioutil.ReadAll(resp.Body)
)Body.Close()
InformationsquelleAutor der Antwort Matt Self
Wenn jemand noch Antworten zu finden, wie es zu tun, das ist, wie ich bin, es zu tun.
Gehen Spielplatz: http://play.golang.org/p/oliqHLmzSX
Zusammenfassend, ich bin darin eine andere Methode zum erstellen einer HTTP-client und Zuordnung zu globalen Variablen und dann mit es Anfragen zu stellen.
Hinweis: die
Dadurch wird das schließen der Verbindung, und stellen Sie es bereit für die Wiederverwendung wieder.
Hoffe, dies hilft jemand.
InformationsquelleAutor der Antwort bn00d
Edit: Das ist eher ein Hinweis für Leute, die konstruieren einer Transport-und Client für jede Anfrage.
Transport
ist die Struktur, die Sie hält verbindungen für re-use:http://golang.org/src/pkg/net/http/transport.go#L46
Also, wenn Sie einen neuen Transport für jede Anfrage, es werden neue verbindungen erstellen jedes mal. In diesem Fall die Lösung ist es, die Transport-Instanz zwischen den clients.
InformationsquelleAutor der Antwort DrJosh9000
IIRC der Standard-client hat verbindungen wiederverwenden. Schließen Sie die Antwort?
InformationsquelleAutor der Antwort zzzz