현재 위치: > 최신 기사 목록> socket_set_timeout을 사용하여 소켓 차단을 피하는 방법? PHP의 모범 사례 팁

socket_set_timeout을 사용하여 소켓 차단을 피하는 방법? PHP의 모범 사례 팁

M66 2025-06-27

PHP 프로그래밍에서 네트워크 커뮤니케이션에 소켓을 사용하는 것이 일반적인 작업입니다. 특히 fsocckopen () 함수를 사용하거나 TCP 연결을 생성 할 때는 일반적으로 네트워크 지연 또는 기타 이유로 인한 차단 문제에 직면합니다. 이 차단은 데이터를 기다리는 동안 다른 작업을 계속 수행하지 못하면 시스템의 응답 성능에 영향을 미칩니다. 다행히도 PHP는 Socket_set_Timeout () 기능을 제공 하여이 문제를 해결하고 소켓 차단을 피할 수 있도록 도와줍니다.

소켓 차단이란 무엇입니까?

네트워크 통신에서 차단은 일부 작업이 완료되기를 기다리는 동안 프로그램이 다른 코드를 계속 실행할 수 없음을 의미합니다. 예를 들어, 소켓을 통해 요청을 보내고 응답을 기다리면 응답을 받기 전에 프로그램이 중지되고 다른 작업을 수행 할 수 없습니다. 장기 차단은 애플리케이션의 효율성을 줄일뿐만 아니라 사용자 경험이 좋지 않을 수도 있습니다.

socket_set_timeout ()의 역할

php의 socket_set_timeout () 함수를 사용하면 소켓의 시간 초과를 설정할 수 있습니다. 소켓이 지정된 시간 내에 응답을받지 않으면 Socket_set_timeout ()는 작동을 끝나고 오류를 반환합니다. 시간 초과 시간을 설정하면 오랜 시간 동안 소켓 작업을 피할 수있어 응답을 기다리고 있기 때문에 프로그램이 응답하지 않도록합니다.

socket_set_timeout ()의 함수 프로토 타입 :

 bool socket_set_timeout(resource $socket, int $seconds, int $microseconds = 0);
  • $ 소켓 : 소켓 리소스를 설정하여 타임 아웃을 설정합니다.

  • $ 초 : 시간이 초과 된 초 수.

  • $ 마이크로 초 : 마이크로 초 타임 아웃 수, 기본값은 0입니다.

이 함수는 부울 값, 성공시 사실 , 실패시 허위를 반환합니다.

예 : socket_set_timeout을 사용하는 방법

원격 서버에 연결하고 요청을 보내야하는 TCP 클라이언트가 있다고 가정합니다. 서버의 응답 속도가 느리거나 네트워크 문제가 있으면 연결 중에 프로그램이 무기한 대기에 갇히기를 원하지 않습니다. 다음은 socket_set_timeout ()를 사용하여 타임 아웃을 설정하는 방법에 대한 샘플 코드입니다.

 <?php
// 만들다socket
$host = 'www.example.com';
$port = 80;
$socket = fsockopen($host, $port, $errno, $errstr, 10); // 연결하려고 노력하십시오10두번째

if (!$socket) {
    echo "연결할 수 없습니다:$errstr ($errno)\n";
    exit;
}

// 시간 초과를 설정하십시오5두번째
socket_set_timeout($socket, 5);

// 요청을 보내십시오
fwrite($socket, "GET / HTTP/1.1\r\nHost: $host\r\nConnection: Close\r\n\r\n");

// 응답을 읽으십시오
$response = '';
while (!feof($socket)) {
    $response .= fgets($socket, 128);
}

// 출력 응답 내용
echo $response;

// 폐쇄socket
fclose($socket);
?>

분석:

  1. 소켓 연결 만들기 : fsocckopen () 함수를 사용하여 원격 서버에 연결하고 10 초의 연결 시간 초과를 설정하십시오.

  2. 소켓 타임 아웃 설정 : Socket_set_Timeout () 함수를 통해 데이터를 읽기위한 시간 초과를 5 초로 설정합니다. 이렇게하면 서버 응답 시간이 5 초를 초과하면 프로그램이 대기를 종료하고 오류를 반환합니다.

  3. 요청을 보내고 응답을 읽으십시오 . 연결이 성공하고 응답이 시간을 초과하지 않으면 프로그램은 HTTP 요청을 보내고 서버의 응답 데이터를 읽습니다.

  4. 닫기 소켓 : 작동이 완료된 후 FClose ()를 사용하여 소켓 연결을 닫습니다.

타임 아웃을 설정하는 것이 중요한 이유는 무엇입니까?

  1. 긴 차단을 피하십시오 : 타임 아웃이 설정되지 않으면 서버가 응답 할 때까지 소켓 작동이 대기합니다. 서버가 실패하거나 네트워크가 상태가 좋지 않으면 프로그램이 오랫동안 차단 될 수 있습니다.

  2. 시스템 응답 성 향상 : 합리적인 시간 초과 시간을 설정하면 프로그램이 적시에 유효하지 않은 요청을 종료하고 시스템의 평활도를 유지하기 위해 다른 작업을 계속 수행 할 수 있습니다.

  3. 사용자 경험 향상 : 웹 응용 프로그램 또는 서비스에서 응답 속도는 사용자 경험에서 중요한 요소입니다. 소켓 막힘을 피함으로써 사용자는 피드백을 신속하게 얻고 서비스 품질을 향상시킬 수 있습니다.

주목해야 할 것

  1. 시간 초과 설정의 적절성 : 특정 네트워크 환경 및 요구 사항에 따라 시간 초과 시간 설정을 결정해야합니다. 너무 짧게 설정하면 연결 시간 초과가 자주 발생할 수 있으며 너무 길어서 시간이 지남에 따라 문제를 감지하지 못할 수 있습니다.

  2. 네트워크 변동 처리 : 경우에 따라 네트워크 변동은 빈번한 시간 초과로 이어질 수 있으며 적절한 재 시도 메커니즘을 설계해야합니다.

  3. 예외 처리와 결합 : Socket_get_status () 를 통해 타임 아웃 오류를 얻을 수 있으며 예외 처리 메커니즘과 결합하여 시간 초과 오류를보다 우아하게 처리 할 수 ​​있습니다.

요약

socket_set_timeout () 함수를 사용하면 PHP의 소켓 차단을 효과적으로 피할 수있어 네트워크 작업이 응용 프로그램의 장기 정체를 일으키지 않도록합니다. 시간 초과 설정은 합리적으로 프로그램의 효율성과 응답 성을 향상시킬뿐만 아니라 특히 네트워크 지연 또는 불안정성에 직면 할 때 사용자 경험을 향상시킬 수 있습니다.