Golang は、ネットワーク プログラミングに非常に適したプログラミング言語です。 Golang では、net/http
など、HTTP リクエストの作成と送信、レスポンスの受信を行う機能を提供する、非常に使いやすい標準ライブラリが提供されています。実際のプロジェクトでは、パフォーマンスの評価と最適化をより適切に実行できるように、HTTP リクエストの消費時間を計算する必要がある場合があります。この記事では、Golang での HTTP リクエストの消費時間を計算する方法を紹介します。
HTTP リクエストに時間がかかる計算
HTTP リクエストにかかる時間を計算する前に、HTTP リクエストのライフ サイクルを理解する必要があります。 HTTPリクエストのライフサイクルは主に以下の4段階に分かれます。
Golang では、time# を渡すことができます。標準ライブラリ #Now()
関数の # を使用して、ある時点の時刻を記録し、時差から HTTP リクエストの消費時間を計算します。以下、上記4段階におけるHTTPリクエスト時間の計算方法を順番に紹介していきます。
net.LookupIP() 関数を通じて DNS 解決を実行できます。この関数は、ホスト名をパラメータとして受け取り、それに対応する IP アドレスのリストを返します。 DNS 解決前と DNS 解決後の時点を記録し、その時間差を計算して DNS 解決時間を取得できます。以下は、DNS 解決に時間がかかるサンプル コードです。
start := time.Now() ips, err := net.LookupIP("www.example.com") end := time.Now() if err != nil { fmt.Println("Failed to resolve DNS:", err) return } dnsTime := end.Sub(start) fmt.Println("DNS resolution time:", dnsTime)
net.Dial() を渡すことができます。 TCP接続を確立する機能。この関数は 2 つのパラメータを受け取ります。最初のパラメータはプロトコル (「tcp」または「tcp4」または「tcp6」) で、2 番目のパラメータはターゲットのホスト名または IP アドレスとポート番号です (例: 「example.com:」)。 80" ")。 TCP 接続が確立される前後の時点を記録し、時差を計算して TCP 接続時間を取得できます。以下は、TCP 接続に時間がかかるサンプル コードです。
start := time.Now() conn, err := net.Dial("tcp", "www.example.com:80") end := time.Now() if err != nil { fmt.Println("Failed to connect to server:", err) return } connTime := end.Sub(start) fmt.Println("TCP connection time:", connTime)
タイプ Do()
関数は、HTTP リクエストを送信して応答を返すことができます。リクエストを送信する前の時点と、レスポンスを受信した後の時点を記録し、その時間差を計算することで、サーバーがリクエストを処理するのにかかる時間を取得できます。以下は、サーバーがリクエストを処理するのに時間がかかるサンプル コードです: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>start := time.Now()
resp, err := http.Get("http://www.example.com")
end := time.Now()
if err != nil {
fmt.Println("Failed to get response:", err)
return
}
body, _ := ioutil.ReadAll(resp.Body)
defer resp.Body.Close()
serverTime := end.Sub(start)
fmt.Println("Server response time:", serverTime)</pre><div class="contentsignin">ログイン後にコピー</div></div>
Do() 関数は、HTTP リクエストを送信して応答を返すことができます。応答を取得してからの時刻を記録し、応答内容の送信が完了してからの時刻を記録し、その時間差を計算することで応答内容の送信時間の経過時間を求めることができます。以下は、応答コンテンツの送信にかかる時間を示すサンプル コードです。
start := time.Now() resp, err := http.Get("http://www.example.com") end := time.Now() if err != nil { fmt.Println("Failed to get response:", err) return } body, _ := ioutil.ReadAll(resp.Body) defer resp.Body.Close() transferTime := end.Sub(start) fmt.Println("Server response time:", transferTime)
上記の 4 つの段階で費やされた時間の合計が、HTTP リクエストにかかる合計時間になります。上記のコード スニペットを組み合わせると、HTTP リクエストに費やされた合計時間を計算できます。以下は、HTTP リクエストの合計時間を計算するサンプル コードです。
start := time.Now() ips, err := net.LookupIP("www.example.com") if err != nil { fmt.Println("Failed to resolve DNS:", err) return } conn, err := net.Dial("tcp", ips[0].String()+":80") if err != nil { fmt.Println("Failed to connect to server:", err) return } connTime := time.Now().Sub(start) req, err := http.NewRequest("GET", "http://www.example.com", nil) if err != nil { fmt.Println("Failed to create HTTP request:", err) return } start = time.Now() resp, err := http.DefaultClient.Do(req) if err != nil { fmt.Println("Failed to get response:", err) return } body, _ := ioutil.ReadAll(resp.Body) defer resp.Body.Close() serverTime := time.Now().Sub(start) transferTime := time.Now().Sub(start) totalTime := connTime + serverTime + transferTime fmt.Println("HTTP request total time:", totalTime)
以上がGolang の http リクエストには時間がかかりますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。