현재 위치: > 최신 기사 목록> php에서 차단 서버 생성 : Socket_create에서 Socket_set_block까지

php에서 차단 서버 생성 : Socket_create에서 Socket_set_block까지

gitbox 2025-05-26

PHP에서 소켓 기반 차단 서버를 구현하면 기본 네트워크 통신 원칙을 이해하는 데 도움이 될 수 있습니다. 차단 모드는 데이터가 처리되거나 연결이 준비 될 때까지 서버가 데이터를 읽거나 작성할 때까지 대기한다는 것을 의미합니다. 이 기사는 단계별로 PHP의 소켓 확장을 사용하는 방법, 소켓 생성, 차단 모드 설정에 이르기까지 간단한 차단 서버를 구축하는 방법을 분석합니다.

1. 준비 : 소켓 확장이 활성화되어 있는지 확인하십시오

먼저 PHP 환경에서 소켓 확장이 활성화되어 있는지 확인하십시오. php.ini 에서 다음 줄을 찾아서 타협하십시오 (있는 경우) :

 extension=sockets

PHP -M 명령을 사용하여 확장자가 활성화되어 있는지 확인하십시오.

 php -m | grep sockets

소켓을 볼 수 있으면 확장자가 활성화됩니다.

2. 소켓을 사용하여 TCP 서버를 만듭니다

다음은 소켓을 생성하는 기본 단계이며 단계별로 각 기능의 역할을 소개합니다.

1. 소켓을 만듭니다

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()) . "\n");
}

여기서 우리는 IPv4 ( AF_INET )를 기반으로 TCP 소켓 ( SOCK_STREAM )을 생성하고 있습니다.

2. 소켓 옵션 설정 (선택 사항)

포트 재사용과 같은 일부 소켓 옵션을 설정할 수 있습니다.

 socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

3. 소켓 바인드

 $host = '0.0.0.0';
$port = 9000;
if (!socket_bind($socket, $host, $port)) {
    die("socket_bind() failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}

4. 항구를 들어라

 if (!socket_listen($socket, 5)) {
    die("socket_listen() failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}

5는 최대 보류중인 연결 요청 수를 나타냅니다.

3. 차단 모드로 설정합니다

socket_set_block을 사용하여 소켓을 차단 모드로 설정하십시오.

 if (!socket_set_block($socket)) {
    die("socket_set_block() failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}

차단 모드로 설정되면 후속 Socket_Accept , Socket_read 및 기타 기능이 작업이 완료 될 때까지 차단됩니다.

4. 연결을 수락하고 데이터를 읽습니다

 echo "서버가 시작되었습니다,포트를 들어보세요 $port...\n";

while (true) {
    $clientSocket = socket_accept($socket);
    if ($clientSocket === false) {
        echo "socket_accept() failed: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    $input = socket_read($clientSocket, 1024);
    if ($input === false) {
        echo "socket_read() failed: " . socket_strerror(socket_last_error($clientSocket)) . "\n";
    } else {
        $input = trim($input);
        echo "메시지를 받았습니다: $input\n";

        $response = "당신은 그것을 보냈습니다:$input\n";
        socket_write($clientSocket, $response, strlen($response));
    }

    socket_close($clientSocket);
}

5. 서버를 종료하십시오

종료해야 할 때 메인 소켓을 닫는 것을 잊지 마십시오.

 socket_close($socket);

6. 액세스 테스트

Telnet Connection 테스트와 같은 명령 줄 클라이언트를 사용할 수 있습니다.

 telnet gitbox.net 9000

또는 연결 테스트를 위해 간단한 PHP 클라이언트를 작성하십시오.

요약

socket_create to socket_set_block 에 의해 완전한 차단 서버를 빌드합니다. 이 모드는 교육, 디버깅 또는 대결 시나리오와 같은 간단한 네트워크 통신 응용 프로그램에 적합합니다. 동시 동시 시나리오의 경우 비 차단 모드를 사용하거나 선택 / 폴링을 사용하여보다 효율적인 이벤트 루프를 달성하는 것이 좋습니다.

이 기사의 실제 단계를 통해 PHP에 서버를 빌드하는 전체 프로세스를 마스터하고 추가 심층 네트워크 프로그래밍을위한 견고한 기반을 마련 할 수 있습니다.