In meinem Go-Programm habe ich einige HTTP-Anfragen gestellt und muss die Antwortzeit zeitlich anpassen (und keine Zeit anfordern).
Hier ist mein aktueller Code (Timing Request Time):
%Vor%Eigentlich wird dieser Code etwas über 5s Anfragezeit zeigen, einschließlich DNS-Auflösung und andere Dinge ... Wenn ich denselben Test mit einem Tool wie Apache JMeter ausführe, ist die Zeit nur etwa 100ms (was die wirkliche Antwortzeit ist des Servers, ohne sich um die Anfrage Zeit kümmern).
Was ich wirklich möchte, ist die tatsächliche Antwortzeit des Servers zu berechnen. Wie kann ich das in Go berechnen?
Sie können es messen, indem Sie eine TCP-Verbindung öffnen und "rohes HTTP" sprechen ( wikipedia , rfc7230 , rfc7231 , rfc7232 , rfc7233 , < a href="https://tools.ietf.org/html/rfc7234"> rfc7234 , rfc7235 ). Sie stellen eine Verbindung her, senden die Anfrage und starten den Timer hier. Und warte auf die Antwort. Auf diese Weise schließen Sie die DNS-Auflösung und die für die Verbindung erforderliche Zeit aus.
Da Sie nicht wissen, ob der Server Daten sofort oder nur dann zurücksendet, wenn alles bereit ist, und Sie keine Informationen über Netzwerkverzögerungen haben, ist es nicht genau, sondern nur eine Schätzung.
Ich würde an 2 Punkten messen: wenn das erste Byte gelesen werden kann und wenn alles gelesen wird:
%Vor%Hinweis:
Es könnte sinnvoll sein, an einem dritten Punkt zu messen: wenn alle Antwortheader gelesen werden. Dies wird erkannt, wenn volle Zeilen von der Antwort (Verbindung) gelesen werden und eine leere Zeile gefunden wird. Diese leere Zeile trennt Antwortheader vom Antworttext.
Um nichts von der absolut gültigen akzeptierten Antwort wegzunehmen, ist eine Alternative, die man beachten sollte, die Implementierung eines benutzerdefinierten RoundTripper, der den Standard-HTTP-Transport und net.Dialer umschließt. Dies kann hilfreich sein, wenn Sie Code programmieren, der http.Client verwendet oder wenn Sie Proxies, TLS, Keep-Alive oder andere HTTP-Funktionen unterstützen müssen, aber nicht alle neu implementieren möchten. Sie werden nicht ganz so viel Kontrolle haben wie mit einem vollständig angepassten Client, aber es lohnt sich, es in Ihrer Toolbox zu haben.
Beispiel für einen Rundenausführer:
%Vor%Ich habe das hier in ein einfaches Beispielprogramm eingefügt: Ссылка