Golang の http リクエストには時間がかかります
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 リクエストを送信して応答を返すことができます。リクエストを送信する前の時点と、レスポンスを受信した後の時点を記録し、その時間差を計算することで、サーバーがリクエストを処理するのにかかる時間を取得できます。以下は、サーバーがリクエストを処理するのに時間がかかるサンプル コードです: <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">ログイン後にコピー</div></div>
- 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 リクエストには時間がかかりますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









OpenSSLは、安全な通信で広く使用されているオープンソースライブラリとして、暗号化アルゴリズム、キー、証明書管理機能を提供します。ただし、その歴史的バージョンにはいくつかの既知のセキュリティの脆弱性があり、その一部は非常に有害です。この記事では、Debian SystemsのOpenSSLの共通の脆弱性と対応測定に焦点を当てます。 Debianopensslの既知の脆弱性:OpenSSLは、次のようないくつかの深刻な脆弱性を経験しています。攻撃者は、この脆弱性を、暗号化キーなどを含む、サーバー上の不正な読み取りの敏感な情報に使用できます。

この記事では、プロファイリングの有効化、データの収集、CPUやメモリの問題などの一般的なボトルネックの識別など、GOパフォーマンスを分析するためにPPROFツールを使用する方法について説明します。

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

この記事では、GOでテーブル駆動型のテストを使用して説明します。これは、テストのテーブルを使用して複数の入力と結果を持つ関数をテストする方法です。読みやすさの向上、重複の減少、スケーラビリティ、一貫性、および

この記事では、コードのランタイム操作に使用されるGoの反射パッケージについて説明します。シリアル化、一般的なプログラミングなどに有益です。実行やメモリの使用量の増加、賢明な使用と最高のアドバイスなどのパフォーマンスコストについて警告します

この記事では、go.modを介してGOモジュールの依存関係の管理、仕様、更新、競合解決をカバーすることについて説明します。セマンティックバージョンや定期的な更新などのベストプラクティスを強調しています。

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...
