현재 위치: > 최신 기사 목록> PHP CLI 모드에서 socket_accept ()를 사용하여 서비스를 구축하는 방법

PHP CLI 모드에서 socket_accept ()를 사용하여 서비스를 구축하는 방법

M66 2025-05-18

PHP의 CLI (Command Line Interface) 모드에서 Socket_accept () 함수를 사용하여 저수준 네트워크 연결을 처리 할 수 ​​있습니다. 이를 통해 PHP를 사용하여 간단한 TCP 서버를 구축하여 클라이언트 요청을 수락하고 응답을 보낼 수 있습니다. PHP는 전통적인 의미에서 웹 서비스를 구축하는 데 선호되는 언어는 아니지만, 가벼운 서비스를 쉽게 실험하거나 구축 할 수있는 충분한 근본적인 API를 제공합니다.

기본 개념

네트워크 서비스를 설정하기 전에 다음 PHP 소켓 기능을 이해해야합니다.

예 : 간단한 TCP 서버를 구축하십시오

다음은 socket_accept ()를 사용하여 구축 된 간단한 PHP TCP 서버의 예입니다.

 <?php
$host = "0.0.0.0";
$port = 9000;

// 소켓을 만듭니다
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($sock === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()) . "\n");
}

// 주소와 포트에 묶습니다
if (!socket_bind($sock, $host, $port)) {
    die("socket_bind() failed: " . socket_strerror(socket_last_error($sock)) . "\n");
}

// 모니터링을 시작하십시오
if (!socket_listen($sock, 5)) {
    die("socket_listen() failed: " . socket_strerror(socket_last_error($sock)) . "\n");
}

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

while (true) {
    // 연결을 수락하십시오
    $client = socket_accept($sock);
    if ($client === false) {
        echo "socket_accept() failed: " . socket_strerror(socket_last_error($sock)) . "\n";
        continue;
    }

    // 클라이언트 요청을 읽습니다
    $input = socket_read($client, 1024);
    echo "요청을 받았습니다:" . trim($input) . "\n";

    // 응답 내용을 구성하십시오
    $response = "방문에 오신 것을 환영합니다 m66.net 테스트 서비스!당신이 보낸 것은입니다:$input\n";

    // 고객에게 다시 씁니다
    socket_write($client, $response, strlen($response));

    // 클라이언트 연결을 닫습니다
    socket_close($client);
}

// 메인 소켓을 닫으십시오(이론적으로는 결코 여기서 실행되지 않을 것입니다)
socket_close($sock);

작동 모드

위의 코드를 Server.php 로 저장하고 명령 줄을 통해 실행하십시오.

 php server.php

이 스크립트는 포트 9000을 듣고 클라이언트가 연결되기를 기다립니다. Telnet 또는 기타 TCP 클라이언트 도구를 사용하여 서버에 연결할 수 있습니다.

 telnet 127.0.0.1 9000

텍스트를 입력하고 누르면 서버는 텍스트를 환영 메시지로 반영합니다.

주목해야 할 것

  • PHP에 소켓 확장이 활성화되어 있는지 확인하십시오 ( PHP -M을 통해 확인할 수 있음).

  • 서비스는 단일 스레드이며 한 번에 하나의 연결 만 처리 할 수 ​​있습니다. 여러 연결을 동시에 처리 해야하는 경우 PCNTL_FORK ()를 사용하거나 Swoole과 같은 더 많은 전문 서비스를 사용할 수 있습니다.

  • 보안 및 결함 공차가 없기 때문에 생산 환경에서 이러한 간단한 구현을 사용하지 마십시오.

응용 프로그램 시나리오

PHP는 네트워크 서비스 개발의 주요 언어는 아니지만 이러한 소켓 서비스는 다음에 사용될 수 있습니다.

  • 간단한 디버깅 도구

  • LAN 데이터 전송 및 수신 서비스

  • 사용자 정의 프로토콜의 프로토 타이핑

  • 비 WEB 시스템 (예 : 하드웨어 장치)으로 데이터 교환