소켓 확장을 사용하여 PHP에서는 네트워크 통신 기능을 매우 유연하게 구현할 수 있으며이를 사용하여 기본 네트워크 서버를 생성 할 수도 있습니다. 이 기사는 Socket_Listen () 및 Socket_accept () 함수를 사용하여 간단한 TCP 서버를 구축하는 방법에 중점을 둡니다.
socket_listen ()
이 기능은 클라이언트 연결 요청을 대기하기 위해 IP 및 포트 바운드가있는 소켓 리소스를 듣는 데 사용됩니다.
socket_accept ()
이 기능은 들어오는 클라이언트 연결 요청을 수락하는 데 사용되며 클라이언트와 통신하기위한 새로운 소켓 리소스를 반환합니다.
소켓 리소스 생성 ( socket_create )
IP 및 포트 바인드 ( Socket_bind )
포트 듣기 ( socket_listen )
클라이언트 연결 루핑 및 수락 ( socket_accept )
데이터를 읽고 쓰고 완전한 의사 소통
클라이언트 및 서버 소켓을 닫습니다
<?php
// 만들다TCP socket(AF_INET프로토콜 패밀리,스트리밍)
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
die("socket_create() 실패하다: " . socket_strerror(socket_last_error()) . "\n");
}
// 묶다IP그리고 포트
$address = '0.0.0.0'; // 모든 네트워크 인터페이스를 듣습니다
$port = 8080;
if (!socket_bind($server, $address, $port)) {
die("socket_bind() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n");
}
// 모니터링을 시작하십시오,연결을 기다리는 큐 길이는 다음과 같습니다5
if (!socket_listen($server, 5)) {
die("socket_listen() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n");
}
echo "서버가 시작되었습니다,감시 장치 {$address}:{$port}\n";
while (true) {
// 클라이언트 연결 차단 및 대기
$client = socket_accept($server);
if ($client === false) {
echo "socket_accept() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
// 클라이언트의 데이터를 읽습니다,최대 읽기1024바이트
$input = socket_read($client, 1024);
if ($input === false) {
echo "socket_read() 실패하다: " . socket_strerror(socket_last_error($client)) . "\n";
socket_close($client);
continue;
}
echo "클라이언트 데이터를 받았습니다: $input\n";
// 처리 데이터 - 다음은 클라이언트의 메시지에 대한 간단한 답변입니다.
$response = "안녕하세요,고객!보내는 데이터는입니다:" . trim($input) . "\n";
socket_write($client, $response, strlen($response));
// 关闭고객连接
socket_close($client);
}
// 서버를 종료하십시오socket(보통 나는 여기에 가지 않을 것입니다)
socket_close($server);
?>
실제로 사용하면 완전한 프로토콜 파서 구현 또는 여러 클라이언트를 비동기로 처리하는 등의 요구에 따라 읽기 및 쓰기 논리를 확장 할 수 있습니다.
리스너의 IP는 특정 주소로 설정하거나 '0.0.0.0'을 사용하여 사용 가능한 모든 네트워크 인터페이스를 청취 할 수 있습니다.
포트 번호는 시스템을 사용하여 포트를 유지하기 위해 피해야하며 일반적으로 1024 이상의 포트를 선택해야합니다.
위의 코드는 초보자 이해에 적합한 단일 스레드 서버입니다.
Socket_Listen () 및 Socket_Accept () 를 통해 PHP는 기본 네트워크 통신 기능을 실현하기 위해 TCP 서버 프로그램을 매우 직접 구축 할 수 있습니다. PHP는 고성능 서버를 위해 특별히 설계된 언어는 아니지만 소규모 서비스를 신속하게 프로토 타입하거나 간단한 네트워크 상호 작용 애플리케이션을 만드는 데 여전히 실용적입니다.