현재 위치: > 최신 기사 목록> 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

마이크로 초가 포함되므로 두 시점 간의 매우 작은 시차를 측정하는 데 사용될 수 있으므로 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;

스크립트는 gettimeofday를 통한 File_Get_Contents 네트워크 요청 전후의 시차를 계산하고 최종적으로 대략적인 지연 시간 (밀리 초)을 초래합니다.

장점과 예방 조치

  • 높은 정밀도 : 시간 () 함수와 비교하여 gettimeofday는 더 높은 정확도로 마이크로 초 시간 측정을 제공합니다.
  • 플랫폼 호환성 : 대부분의 주류 운영 체제에서 지원됩니다.
  • 시스템 시간의 영향 : 정밀도가 높지만 시스템 시간이 점프 (NTP 동기화)가 발생하면 오류가 발생할 수 있습니다.

결론

gettimeofday 는 PHP에서 몇 가지 고 차전한 타이밍 도구 중 하나이며, 특히 네트워크 대기 시간 테스트 또는 성능 평가와 같은 엄격한 시간 요구 사항이있는 시나리오에 적합합니다. 적절한 컨텍스트 제어 방법과 결합하여 밀리 초 또는 마이크로 초 성능 측정을 쉽게 구현하여 최적화를위한 데이터 지원을 제공 할 수 있습니다.