Golang は、ネットワーク プログラミングに非常に適したプログラミング言語です。 Golang では、net/http
など、HTTP リクエストの作成と送信、レスポンスの受信を行う機能を提供する、非常に使いやすい標準ライブラリが提供されています。実際のプロジェクトでは、パフォーマンスの評価と最適化をより適切に実行できるように、HTTP リクエストの消費時間を計算する必要がある場合があります。この記事では、Golang での HTTP リクエストの消費時間を計算する方法を紹介します。
HTTP リクエストに時間がかかる計算
HTTP リクエストにかかる時間を計算する前に、HTTP リクエストのライフ サイクルを理解する必要があります。 HTTPリクエストのライフサイクルは主に以下の4段階に分かれます。
- DNS 解決: ドメイン名を IP アドレスに解決します。
- TCP 接続: IP アドレスを介して TCP 接続を確立します。
- サーバー処理要求: サーバーが処理します。処理のための HTTP リクエスト リソースの検索およびその他の操作
- 応答コンテンツの送信: サーバーは応答テキストをクライアントに送信します
Golang では、time# を渡すことができます。標準ライブラリ #Now()
関数の # を使用して、ある時点の時刻を記録し、時差から HTTP リクエストの消費時間を計算します。以下、上記4段階におけるHTTPリクエスト時間の計算方法を順番に紹介していきます。
- DNS 解決には時間がかかります
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)
- TCP 接続に時間がかかります
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 リクエストを送信して応答を返すことができます。リクエストを送信する前の時点と、レスポンスを受信した後の時点を記録し、その時間差を計算することで、サーバーがリクエストを処理するのにかかる時間を取得できます。以下は、サーバーがリクエストを処理するのに時間がかかるサンプル コードです: <pre class='brush:php;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>
- Golang では、## を介して#http.Client
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 リクエストの時間を計算する方法です。 DNS 解決時間、TCP 接続時間、サーバー処理リクエスト時間、および応答コンテンツ配信時間を個別に計算することで、ネットワーク リクエストのパフォーマンスをより適切に評価し、最適化できます。
以上がGolang の http リクエストには時間がかかりますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Goのパッケージインポートメカニズム:名前付きインポート(例:インポート "fmt&quot;)および空白のインポート(例:_&quot; fmt&quot;)について説明しています。 名前付きインポートはパッケージのコンテンツにアクセス可能になり、空白のインポートはtのみを実行します

この記事では、Webアプリケーションでのページ間データ転送のためのBeegoのnewflash()関数について説明します。 newflash()を使用して、コントローラー間で一時的なメッセージ(成功、エラー、警告)を表示し、セッションメカニズムを活用することに焦点を当てています。 リミア

この記事では、MySQLクエリの結果をGO structスライスに効率的に変換することを詳しく説明しています。 データベース/SQLのスキャン方法を使用して、手動で解析することを避けて強調しています。 DBタグとロブを使用した構造フィールドマッピングのベストプラクティス

この記事では、ユニットテストのためにGOのモックとスタブを作成することを示しています。 インターフェイスの使用を強調し、模擬実装の例を提供し、模擬フォーカスを維持し、アサーションライブラリを使用するなどのベストプラクティスについて説明します。 articl

この記事では、GENICSのGOのカスタムタイプの制約について説明します。 インターフェイスがジェネリック関数の最小タイプ要件をどのように定義するかを詳しく説明し、タイプの安全性とコードの再利用性を改善します。 この記事では、制限とベストプラクティスについても説明しています

この記事では、goで効率的なファイルの書き込みを詳しく説明し、os.writefile(小さなファイルに適している)とos.openfileおよびbuffered write(大規模ファイルに最適)と比較します。 延期エラー処理、Deferを使用し、特定のエラーをチェックすることを強調します。

この記事では、GOでユニットテストを書くことで、ベストプラクティス、モッキングテクニック、効率的なテスト管理のためのツールについて説明します。

この記事では、トレースツールを使用してGOアプリケーションの実行フローを分析します。 手動および自動計装技術について説明し、Jaeger、Zipkin、Opentelemetryなどのツールを比較し、効果的なデータの視覚化を強調しています


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
