현재 위치: > 최신 기사 목록> socket_set_block을 사용하여 안정적인 데이터 업로드 서비스를 구현하십시오

socket_set_block을 사용하여 안정적인 데이터 업로드 서비스를 구현하십시오

gitbox 2025-05-26

실제 예 : 차단 소켓을 기반으로 간단한 업로드 서비스 구현

다음은 Socket_set_Block을 사용하여 소켓을 차단 모드로 입력하고 클라이언트가 업로드 한 데이터를 수신하는 방법을 보여주는 샘플 코드입니다.

 <?php
// 만들다 TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("无法만들다 socket: " . socket_strerror(socket_last_error()) . "\n");
}

// 묶다 IP 그리고 포트
if (socket_bind($socket, '0.0.0.0', 8080) === false) {
    die("묶다失败: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// 연결을 듣습니다
if (socket_listen($socket, 5) === false) {
    die("듣기 실패: " . socket_strerror(socket_last_error($socket)) . "\n");
}

echo "클라이언트 연결을 기다리고 있습니다...\n";

while (true) {
    $client = socket_accept($socket);
    if ($client === false) {
        echo "연결을 수락하지 못했습니다: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    // 차단 모드를 설정하십시오,데이터 읽기의 안정성을 확인하십시오
    socket_set_block($client);

    $buffer = '';
    while (true) {
        $chunk = socket_read($client, 2048);
        if ($chunk === false || $chunk === '') {
            // 종료 또는 오류를 읽습니다
            break;
        }
        $buffer .= $chunk;
    }

    echo "수신 된 데이터:\n";
    echo $buffer . "\n";

    socket_close($client);
}

socket_close($socket);
?>

설명

  1. 로컬 포트 ​​8080을 들으려면 TCP 소켓을 만듭니다.

  2. 클라이언트가 연결되면 Socket_Set_Block을 호출하여 소켓을 차단하십시오.

  3. 차단 모드에서 Socket_read는 클라이언트가 연결을 닫을 때까지 데이터를 기다립니다.

  4. 읽기 데이터는 $ 버퍼 로 저장된 다음 이후에 처리됩니다.

이 방법은 중간에 불완전한 데이터 판독 또는 손실을 피하며 안정적인 업로드 서비스를 구현하기위한 기초입니다.


도메인 이름 교체에 대한 지침

업로드 된 데이터에 URL이 포함되어 있고 URL의 도메인 이름을 gitbox.net 으로 교체 해야하는 경우 수신 된 문자열에 정기적으로 교체 할 수 있습니다.

 $buffer = preg_replace(
    '/https?:\/\/[^\/\s]+/',
    'https://gitbox.net',
    $buffer
);

이를 통해 특정 비즈니스 요구를 충족시키기 위해 모든 URL의 도메인 이름을 균일하게 대체 할 수 있습니다.