J'essaie de mesurer les temps de chargement successifs d'une URL, mais je n'ai pas pu supprimer une connexion http et recommencer à zéro à chaque mesure. Avec ce code ...golang - impossible de supprimer les connexions http
func getloadtime (url string) float64 {
// setup client
tr := &http.Transport{
DisableKeepAlives: true}
client := &http.Client{Transport:tr}
// page load and measure
start := time.Now()
_, _ = client.Get(url)
return(time.Since(start).Seconds())
}
func main() {
for i := 0; i < 5; i++ {
fmt.Println(getloadtime("http://www.google.com"))
}
}
Je reçois des mesures comme ceci:
2.75
0.13
0.09
0.12
0.115
donc il semble que la connexion HTTP est maintenue de la charge initiale étant donné que les charges suivantes sont beaucoup plus rapides. J'ai aussi essayé de placer « Connexion » à « Fermer » dans l'en-tête, mais obtenir les mêmes résultats:
req, err := http.NewRequest("GET", url, nil)
req.Header.Set("Connection", "close")
_, _ := client.Do(req)
Qu'est-ce que je fais mal?
Vous n'êtes pas la mesure de ce que vous pensez que vous êtes. Non seulement votre premier exemple ouvre une nouvelle connexion à chaque fois, mais il fuit les connexions après le retour. Ne jetez jamais un 'http.Transport', sinon vous ferez des connexions. Quel est le problème que vous essayez de résoudre? – JimB
J'essaie d'obtenir des résultats cohérents de la charge de la page à des fins de test de stress (il s'agit d'une version simplifiée qui proviendra de plusieurs processus), j'essaie donc de simuler/créer une nouvelle connexion à chaque fois correctement). Il est clair que quelque chose est maintenu dans les mesures de pageload # 2- # 5 dans la boucle. Je suppose qu'il utilise la même connexion ... mais je ne peux pas le dire. –
Il est impossible d'utiliser la même connexion, car vous utilisez un nouveau Transport à chaque fois. Je suppose que c'est votre cache de résolution qui fait la différence. Plutôt que de deviner, inspectez les connexions en cours. Il y a aussi un champ 'Request.Close' pour définir l'en-tête automatiquement. – JimB