PHP의 CLI (Command Line Interface) 모드에서 Socket_accept () 함수를 사용하여 저수준 네트워크 연결을 처리 할 수 있습니다. 이를 통해 PHP를 사용하여 간단한 TCP 서버를 구축하여 클라이언트 요청을 수락하고 응답을 보낼 수 있습니다. PHP는 전통적인 의미에서 웹 서비스를 구축하는 데 선호되는 언어는 아니지만, 가벼운 서비스를 쉽게 실험하거나 구축 할 수있는 충분한 근본적인 API를 제공합니다.
네트워크 서비스를 설정하기 전에 다음 PHP 소켓 기능을 이해해야합니다.
socket_create () : 소켓 자원을 만듭니다.
socket_bind () : 소켓을 IP 주소와 포트에 바인딩합니다.
socket_listen () : 들어오는 연결을 듣습니다.
socket_accept () : 연결 요청을 허용합니다.
socket_read () / socket_write () : 데이터를 수신하고 보내는 데 사용됩니다.
socket_close () : 연결을 닫습니다.
다음은 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 시스템 (예 : 하드웨어 장치)으로 데이터 교환