현재 위치: > 최신 기사 목록> socket_accept () + socket_set_option () : 연결 매개 변수를 설정하여 성능을 최적화합니다

socket_accept () + socket_set_option () : 연결 매개 변수를 설정하여 성능을 최적화합니다

M66 2025-06-15

PHP가 소켓을 사용하여 네트워크 서비스를 구축 할 때는 성능 튜닝이 무시할 수없는 단계입니다. Socket_accept () 는 클라이언트 연결을 처리하는 핵심 기능이며 Socket_set_option () 로 합리적으로 매개 변수를 연결하면 연결의 안정성과 응답 속도를 크게 최적화 할 수 있습니다. 이 기사는 실제 예제를 결합 하여이 두 기능을 사용하여 연결 매개 변수를 설정하여 성능을 향상시키는 방법을 설명합니다.

1. socket_accept () 의 역할

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 에서 글을 듣고 클라이언트의 연결을 수락합니다. 일반적으로 작동하지만 동시성이 높은 경우 이러한 코드는 기본 매개 변수 설정으로 인해 성능 병목 현상 또는 리소스 낭비를 경험합니다.

2. Socket_set_option ()을 사용하여 연결 성능을 최적화하십시오

소켓 동작을 더 잘 제어하기 위해 Socket_set_option ()을 사용하여 다음과 같은 주요 매개 변수를 설정할 수 있습니다.

  • SO_REUSEADDR : 소켓 주소를 재사용 할 수 있습니다

  • SO_KEEPALIVE : 연결을 피하기 위해 TCP 유지 경화 감지 활성화 허위 사망

  • SO_RCVBUFSO_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);

버퍼를 적절하게 늘리면 큰 데이터 전송의 효율성을 향상시킬 수 있지만 메모리 압력을 유발하기에는 너무 높게 설정하지 않도록주의하십시오.

3. 완전한 예

다음은 연결 성능을 최적화하기 위해 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);
}

4. 요약

Socket_accept ()Socket_set_option ()을 사용하여 연결의 설정 및 동작을 제어 할뿐만 아니라 성능을 최적화하고 동시성 기능을 향상시킬 수 있습니다. 이것은 고성능 네트워크 서비스를 구축하는 데 필수적인 부분입니다. 개발 프로세스 중에 특정 응용 프로그램 시나리오에 따라 다양한 매개 변수를 조정하여 최상의 결과를 얻는 것이 좋습니다.