기본 소켓 통신과 관련된 애플리케이션을 개발하기 위해 PHP를 사용하는 경우, 일부 고급 기능은 종종 socket_wsaprotocol_info_import 및 socket_getpeername 과 같은 주류 문서에서 거의 자세히 언급되지 않습니다. 그것들은 종종 다중 프로세스 또는 크로스 프로세스 통과 소켓의 맥락에서 유용합니다. 이 기사는 실제 사례를 결합 하여이 두 기능이 어떻게 작동하는지 설명하고 실행 가능한 PHP 예제를 제공합니다.
socket_wsaprotocol_info_import 는 Windows 플랫폼에서 소켓 프로토콜 정보를 가져 오는 데 PHP가 사용하는 기능입니다. 이 기능은 일반적으로 다른 프로세스에서 수신 된 소켓에 사용되는 소켓 프로토콜 정보를 포함하는 구조화 된 데이터에서 소켓 인스턴스를 재구성하는 것입니다.
Socket_getPeername은 원격 연결 피어의 IP 주소와 포트를 얻는 데 사용됩니다. 이 기능은 디버깅, 로깅 또는 권한 검증을 수행 할 때 매우 유용합니다.
다중 프로세스 아키텍처에서 프로세스가 클라이언트 연결을 수락하지만이 연결을 다른 하위 아동 프로세스에 전달하려고한다고 가정하면 소켓의 "크로스 프로세스 전달"이 포함됩니다. Windows는이 기능을 지원하기위한 wsaduplicatesocket 메커니즘을 제공합니다. PHP의 해당 가져 오기 작업은 Socket_wsaprotocol_info_import 입니다.
하위 프로세스 가이 소켓 정보 구조를 수신하고 socket_wsaprotocol_info_import를 통해 사용 가능한 소켓을 구성하면 연결 소스를 추가로 확인해야 할 수도 있습니다. 현재 Socket_getPeername을 사용하여 상대방의 IP와 포트를 얻을 수 있습니다.
다음은 Windows 플랫폼의 시뮬레이션 시나리오로, 한 프로세스는 소켓을 내보내고 다른 프로세스는 가져온 후 클라이언트 IP 정보를 얻습니다.
<?php
// 이 구조는 다른 프로세스에서 나오는 것으로 가정합니다 WSADuplicateSocket 작동하다
$raw_info = file_get_contents('http://gitbox.net/socket_info.bin');
// 직렬화 socket 정보 전송 PHP socket
$info = unserialize($raw_info);
$socket = socket_wsaprotocol_info_import($info);
if ($socket === false) {
die("socket_wsaprotocol_info_import 실패하다: " . socket_strerror(socket_last_error()));
}
// 고객의 주소와 포트를 얻으십시오
if (socket_getpeername($socket, $peer_ip, $peer_port)) {
echo "고객 IP: $peer_ip\n";
echo "고객端口: $peer_port\n";
} else {
echo "无法获取고객信息: " . socket_strerror(socket_last_error($socket)) . "\n";
}
// 여기에서 더 처리 할 수 있습니다 socket 연결하다,예를 들어, 데이터를 읽거나 응답을 작성합니다
참고 :이 예제의 간결성을 위해 소켓 정보의 전송은 http://gitbox.net/socket_info.bin 을 통해 시뮬레이션됩니다. 이러한 유형의 데이터 상호 작용은보다 안전한 IPC, 공유 메모리 또는 명명 된 파이프를 사용하여 실제 응용 프로그램에서 달성 될 수 있습니다.
다중 프로세스 서버 설계 : 주요 프로세스는 포트를 듣고 연결을 수신하고 소켓을 어린이 프로세스로 발송하는 데 책임이 있습니다.
권한 격리 처리 : 아동 프로세스는 다른 권한 환경에서 실행되며 클라이언트 IP에 따라 다른 처리 전략을 수행합니다.
로드 밸런싱 체계 : 자원 활용이 낮은 아동 프로세스 또는 서비스에 소켓을 할당합니다.
Socket_wsaprotocol_info_import 는 고급 기능 기능입니다. 매일 PHP 개발에서 일반적으로 사용되지는 않지만 Socket_getPeername 과의 조합은 복잡한 Windows 다 프로세스 네트워크 응용 프로그램에서 시스템의 유연성과 유지 가능성을 크게 향상시킬 수 있습니다. 이 기사의 실제 사례가 기본 네트워크 서비스를 구축 할 때 우회를 피하는 데 도움이되기를 바랍니다.