現在の位置: ホーム> 最新記事一覧> GetTimeOfday関数を使用して、ネットワークレイテンシの正確なテストを実行する方法は?

GetTimeOfday関数を使用して、ネットワークレイテンシの正確なテストを実行する方法は?

gitbox 2025-06-30
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// このコードは、環境の初期化に使用されます,テキストの内容とは何の関係もありません</span></span><span>

</span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'UTC'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ネットワークレイテンシテストの準備...\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h1>使い方 gettimeofday 関数は、ネットワーク遅延の正確なテストを実行します?</h1>

<p>ネットワークプログラミングとパフォーマンスチューニングで,ネットワークリクエストの遅延を測定することは重要なタスクです。PHP この操作を支援するために、複数の時間関数が提供されます,で <code>gettimeofday

マイクロ秒が含まれているため、2つの時点間の非常に小さな時間差を測定するために使用でき、それによりHTTP要求などの操作の正確な時間延長を計算できます。

GetTimeOfdayを使用してネットワークレイテンシをテストする方法

GetTimeOfdayを使用してURLへのアクセスの遅延をテストする簡単な例を次に示します。

 &lt;?php
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">get_microtime</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-variable">$t</span></span><span> = </span><span><span class="hljs-title function_ invoke__">gettimeofday</span></span><span>();
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$t</span></span><span>[</span><span><span class="hljs-string">'sec'</span></span><span>] + </span><span><span class="hljs-variable">$t</span></span><span>[</span><span><span class="hljs-string">'usec'</span></span><span>] / </span><span><span class="hljs-number">1e6</span></span><span>;
}

</span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">"https://www.example.com"</span></span><span>;

</span><span><span class="hljs-comment">// 開始時間を記録します</span></span><span>
</span><span><span class="hljs-variable">$start</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_microtime</span></span><span>();

</span><span><span class="hljs-comment">// ネットワークリクエストを開始します</span></span><span>
</span><span><span class="hljs-variable">$opts</span></span><span> = </span><span><span class="hljs-keyword">array</span></span><span>(
    </span><span><span class="hljs-string">"http"</span></span><span> => </span><span><span class="hljs-keyword">array</span></span><span>(
        </span><span><span class="hljs-string">"method"</span></span><span> => </span><span><span class="hljs-string">"GET"</span></span><span>,
        </span><span><span class="hljs-string">"timeout"</span></span><span> => </span><span><span class="hljs-number">10</span></span><span>
    )
);
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>(</span><span><span class="hljs-variable">$opts</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>);

</span><span><span class="hljs-comment">// 終了時間を記録します</span></span><span>
</span><span><span class="hljs-variable">$end</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_microtime</span></span><span>();

</span><span><span class="hljs-variable">$latency</span></span><span> = (</span><span><span class="hljs-variable">$end</span></span><span> - </span><span><span class="hljs-variable">$start</span></span><span>) * </span><span><span class="hljs-number">1000</span></span><span>; </span><span><span class="hljs-comment">// ミリ秒に変換します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"アクセス <span class="hljs-subst">$url</span></span></span><span> 遅延はです:" . </span><span><span class="hljs-title function_ invoke__">round</span></span><span>(</span><span><span class="hljs-variable">$latency</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>) . </span><span><span class="hljs-string">" ミリ秒\n"</span></span><span>;
?&gt;

スクリプトは、 File_Get_Contentsネットワーク要求の前後の時間差をGetTimeOfdayを通じて計算し、最後に近似遅延時間(ミリ秒単位)になります。

利点と予防策

  • 高精度Time()関数と比較して、 GetTimeOfdayは、より高い精度でマイクロ秒時間測定を提供します。
  • プラットフォーム互換性:ほとんどの主流のオペレーティングシステムでサポートされています。
  • システム時間の影響:それは高精度ですが、システムタイムがジャンプする場合(NTP同期など)、エラーが発生する可能性があります。

結論

GetTimeOfdayは、PHPの数少ない高精度タイミングツールの1つであり、特にネットワークレイテンシテストやパフォーマンス評価などの厳格な時間要件を持つシナリオに適しています。適切なコンテキスト制御メソッドと組み合わせることで、ミリ秒またはマイクロ秒のパフォーマンス測定を簡単に実装して、最適化のデータサポートを提供できます。