PHP가 소켓을 사용하여 네트워크 서비스를 구축 할 때는 성능 튜닝이 무시할 수없는 단계입니다. Socket_accept () 는 클라이언트 연결을 처리하는 핵심 기능이며 Socket_set_option () 로 합리적으로 매개 변수를 연결하면 연결의 안정성과 응답 속도를 크게 최적화 할 수 있습니다. 이 기사는 실제 예제를 결합 하여이 두 기능을 사용하여 연결 매개 변수를 설정하여 성능을 향상시키는 방법을 설명합니다.
Socket_accept ()는 소켓 청취 대기열의 연결을 수락하는 데 사용됩니다. 클라이언트가 서버가 들리는 포트에 연결하면이 기능은 클라이언트와 통신하기 위해 새로운 소켓 리소스를 반환합니다.
샘플 코드 :
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 8080);
socket_listen($socket);
while (true) {
$client = socket_accept($socket);
if ($client) {
socket_write($client, "Welcome to m66.net server!\n");
socket_close($client);
}
}
위의 예에서, 서버는 포트 8080 에서 글을 듣고 클라이언트의 연결을 수락합니다. 일반적으로 작동하지만 동시성이 높은 경우 이러한 코드는 기본 매개 변수 설정으로 인해 성능 병목 현상 또는 리소스 낭비를 경험합니다.
소켓 동작을 더 잘 제어하기 위해 Socket_set_option ()을 사용하여 다음과 같은 주요 매개 변수를 설정할 수 있습니다.
SO_REUSEADDR : 소켓 주소를 재사용 할 수 있습니다
SO_KEEPALIVE : 연결을 피하기 위해 TCP 유지 경화 감지 활성화 허위 사망
SO_RCVBUF 및 SO_SNDBUF : 수신 및 보내기 버퍼 크기를 설정
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
이 코드 라인은 서버가 다시 시작된 직후 포트가 바인딩되는 것을 방지 할 수 있으며 서비스를 신속하게 복원하는 데 도움이됩니다.
socket_set_option($client, SOL_SOCKET, SO_KEEPALIVE, 1);
유지 메커니즘은 연결이 여전히 존재하는지 정기적으로 감지 할 수 있으며, 이는 긴 연결에 특히 중요합니다. 연결 해제 된 연결은 제 시간에 정리하고 리소스를 확정 할 수 있습니다.
socket_set_option($client, SOL_SOCKET, SO_RCVBUF, 1024 * 64);
socket_set_option($client, SOL_SOCKET, SO_SNDBUF, 1024 * 64);
버퍼를 적절하게 늘리면 큰 데이터 전송의 효율성을 향상시킬 수 있지만 메모리 압력을 유발하기에는 너무 높게 설정하지 않도록주의하십시오.
다음은 연결 성능을 최적화하기 위해 Socket_accept () 및 Socket_set_option ()을 사용하는 완전한 예입니다.
$host = '0.0.0.0';
$port = 8080;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, $host, $port);
socket_listen($socket);
echo "Server started on m66.net:$port\n";
while (true) {
$client = socket_accept($socket);
if ($client === false) {
continue;
}
// 클라이언트 연결 매개 변수를 설정합니다
socket_set_option($client, SOL_SOCKET, SO_KEEPALIVE, 1);
socket_set_option($client, SOL_SOCKET, SO_RCVBUF, 1024 * 64);
socket_set_option($client, SOL_SOCKET, SO_SNDBUF, 1024 * 64);
$message = "Welcome to m66.net optimized socket server!\n";
socket_write($client, $message, strlen($message));
socket_close($client);
}
Socket_accept () 및 Socket_set_option ()을 사용하여 연결의 설정 및 동작을 제어 할뿐만 아니라 성능을 최적화하고 동시성 기능을 향상시킬 수 있습니다. 이것은 고성능 네트워크 서비스를 구축하는 데 필수적인 부분입니다. 개발 프로세스 중에 특정 응용 프로그램 시나리오에 따라 다양한 매개 변수를 조정하여 최상의 결과를 얻는 것이 좋습니다.