현재 위치: > 최신 기사 목록> 긴 연결 서비스에서 stream_set_timeout의 모범 사례는 무엇입니까?

긴 연결 서비스에서 stream_set_timeout의 모범 사례는 무엇입니까?

gitbox 2025-09-15

긴 연결 서비스에서 stream_set_timeout의 모범 사례는 무엇입니까?

PHP에서 Stream_set_timeout은 종종 네트워크 통신, 파일 운영 및 기타 시나리오에 사용되는 스트림 리소스의 시간 초과를 설정하는 데 사용되는 기능입니다. 특히 긴 연결 서비스에서는 시간 초과를 합리적으로 설정하는 것이 중요합니다. 긴 연결 서비스는 종종 연결을 오랫동안 열어두고 라이브 채팅, 온라인 게임, 푸시 서비스 등과 같은 클라이언트와 서버 간의 지속적인 커뮤니케이션을 처리하는 데 사용됩니다.

1. 왜 긴 연결에서 stream_set_timeout을 사용합니까?

긴 연결의 가장 큰 특징은 짧은 연결과 달리 연결이 자주 분리되지 않으므로 일반적으로 각 요청-응답 후 연결을 닫습니다. 긴 연결은 오랫동안 활성을 유지해야하므로 연결 시간을 관리하는 방법이 핵심 문제입니다. Stream_set_timeout은 활성화되지 않은 경우 연결이 점유되거나 중단되는 것을 방지하기 위해 흐름 작업의 시간 초과 시간 (예 : 읽기, 쓰기 등)을 제어하는 ​​데 사용됩니다.

긴 연결 서비스에서는 Stream_Set_Timeout은 주로 다음 기능이 있습니다.

  • 자원 폐기물 방지 : 클라이언트가 오랫동안 데이터와 상호 작용하지 않으면 서버의 연결이 중단되어 시스템 리소스가 낭비 될 수 있습니다. 시간 초과 시간을 합리적으로 설정하면 유휴 연결을 시간에 닫고 시스템 리소스를 해제 할 수 있습니다.

  • 교착 상태를 피하십시오 : 장기 유휴 연결로 인해 내부 자원이 잠겨 다른 연결의 정상적인 처리에 영향을 줄 수 있습니다. 적절한 시간 초과를 설정하면 이런 일이 발생하지 않을 수 있습니다.

  • 서비스 안정성 향상 : 타임 아웃 메커니즘은 클라이언트가 오랫동안 응답하거나 연결을 잃지 않도록 할 수 있습니다. 서버는 정시에 실패한 연결을 정리하여 서비스의 안정성을 보장 할 수 있습니다.

2. stream_set_timeout을 사용하는 기본 방법

stream_set_timeout 함수의 기본 구문은 다음과 같습니다.

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">stream_set_timeout</span></span><span> ( resource </span><span><span class="hljs-variable">$stream</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$seconds</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$microseconds</span></span><span> = </span><span><span class="hljs-number">0</span></span><span> )
</span></span>
  • $ stream : 타임 아웃으로 설정 해야하는 스트림 리소스.

  • $ 초 : 설정 시간 초과 시간, 초의 설정.

  • $ 마이크로 초 : 옵션 매개 변수, 마이크로 초의 시간 초과 부분을 설정하십시오.

3. 긴 연결 서비스의 시간 초과 정책

긴 연결 서비스에서는 시간 초과를 합리적으로 설정하는 것이 복잡한 균형 문제입니다. 시간 초과가 너무 짧게 설정되면 약간의 연결이 약간 연결되지 않아 일부 연결이 연결이 끊어 질 수있어 재 연결 오버 헤드가 증가합니다. 시간 초과가 너무 길면 자원이 제 시간에 재활용되지 않을 수 있습니다.

몇 가지 일반적인 시간 초과 전략이 있습니다.

3.1 간헐적 심장 박동 탐지

긴 연결의 경우, 연결이 여전히 유효한지 확인하기 위해 특정 시간 간격 내에서 클라이언트에 "하트 비트"패킷을 보내는 것이 일반적입니다. 이 경우, 하트 비트 패킷의 수신에 따라 타임 아웃 시간을 동적으로 조정할 수 있습니다. 예를 들어:

  • 30 초마다 하트 비트 패킷을 보내십시오.

  • 하트 비트 패킷이 60 초 이내에 수신되지 않으면 타임 아웃이 트리거됩니다.

 <span><span><span class="hljs-title function_ invoke__">stream_set_timeout</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-number">60</span></span><span>); </span><span><span class="hljs-comment">// 최대를 설정하십시오60두 번째가 활성화되지 않은 경우 시간 초과</span></span><span>
</span></span>

3.2 맞춤형 유휴 시간 초과

긴 연결 서비스에 의해 처리 된 데이터가 간헐적 인 경우 일정 기간 동안 작동이 없을 수 있습니다. 불필요한 리소스 사용을 피하려면 유휴 시간 초과를 설정할 수 있습니다. 예를 들어, 데이터 상호 작용없이 5 분마다 분리하도록 설정하십시오.

 <span><span><span class="hljs-title function_ invoke__">stream_set_timeout</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-number">300</span></span><span>); </span><span><span class="hljs-comment">// 유휴 연결의 시간 초과 시간을 설정하십시오300두번째(5분)</span></span><span>
</span></span>

3.3 읽기 및 쓰기 시간 초과를 설정하십시오

실제 응용 분야에서는 긴 연결이 "활성"또는 "유휴 상태"상태 일뿐 만 아니라 데이터 읽기 및 쓰기 작업의 시간 초과를 고려해야합니다. 예를 들어, 데이터를 수신 할 때 네트워크 불안정성 또는 몇 가지 이유로 인해 클라이언트가 제 시간에 도착하지 않을 수 있습니다. 이 경우 서버는 Stream_set_timeout을 통해 읽기 및 쓰기 시간 초과를 설정하여 긴 대기를 피할 수 있습니다.

 <span><span><span class="hljs-comment">// 데이터를 읽을 때 시간 초과를 설정하십시오 5 두번째</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_set_timeout</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);
</span></span>

읽기 및 쓰기 시간 초과를 설정함으로써 서버는 실패한 요청에 적시에 응답하고 적절한 재 시도 또는 오류 처리를 수행 할 수 있습니다.

3.4 시간 초과는 예외 처리와 결합됩니다

긴 연결의 시간 초과 설정은 예외 처리 메커니즘과 함께 사용해야합니다. PHP에서는 Stream_get_Meta_Data를 통해 스트림의 현재 상태를 확인하고 시간 초과 로직과 함께 예외 처리를 수행 할 수 있습니다.

 <span><span><span class="hljs-comment">// 설정 10 두번째超时</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_set_timeout</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>);

</span><span><span class="hljs-comment">// 데이터를 읽습니다</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);

</span><span><span class="hljs-comment">// 스트림의 메타 데이터를 얻으십시오</span></span><span>
</span><span><span class="hljs-variable">$metaData</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_get_meta_data</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$metaData</span></span><span>[</span><span><span class="hljs-string">'timed_out'</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-comment">// 이 작업을 다시 시도하거나 분리 할 수 ​​있습니다</span></span><span>
}
</span></span>

4. 모범 사례

  • 시간 초과 시간을 합리적으로 선택하십시오 . 서비스의 특정 요구에 따라 적절한 시간 초과 시간을 설정하십시오. 데이터 상호 작용이 빈번한 경우 시간 초과 시간이 더 짧아 질 수 있습니다. 상호 작용이 적으면 시간 초과 시간이 더 길어질 수 있습니다. 너무 짧거나 너무 긴 시간 초과를 설정하지 않으므로 시스템의 안정성과 성능에 영향을 미칩니다.

  • 잘못된 연결을 정기적으로 정리하십시오. 유효하지 않은 연결 : 하트 비트 메커니즘을 통한 연결 활동 또는시기 적절한 시간을 확인하여 오랜 시간 동안 활성화되지 않은 연결이 정시에 닫혀 시스템 리소스를 확보 할 수 있는지 확인하십시오.

  • 동시성 높은 상황에서의 시간 초과 전략 : 긴 연결 서비스가 높은 동시성 요청을 처리 해야하는 경우, 다른 유형의 요청에 대해 다른 시간 초과 시간을 설정하고 실제 상황에 따라 동적으로 조정하는 것을 고려하십시오.

  • 다른 메커니즘과 결합 : 오류 처리, 재 시도 메커니즘,로드 밸런싱 등과 함께 시간 초과 관리를 사용해야합니다.

5. 요약

Stream_set_timeout 은 PHP, 특히 긴 연결 서비스에서 매우 유용한 기능입니다. 시간 초과 시간을 합리적으로 설정하면 연결 상태를 효과적으로 관리하고 자원 폐기물을 피하며 효율적이고 안정적인 서비스를 보장 할 수 있습니다. 실제 애플리케이션에서는 서비스의 요구에 따라 타임 아웃 전략을 유연하게 구성해야하며 동시에 연결 상태를 적시에 확인하고 처리 할 수 ​​있도록 예외 처리 메커니즘과 결합해야합니다.