PHP 네트워크 프로그래밍에서 성능을 향상시키고 자원 소비를 줄이는 데 지속적인 연결이 중요합니다. 긴 연결을 구현하는 일반적인 방법은 TCP의 SO_Keepalive 옵션을 설정하여 운영 체제가 정기적으로 "LIVE"패킷을 보내도록 연결이 여전히 유효한지 감지하는 것입니다. 이 기사는 PHP의 socket_set_option 함수를 결합하여 SO_KEEPALIVE를 사용하여 긴 연결 유지를 달성하는 방법을 자세히 설명합니다.
SO_KEEPALIVE 는 TCP 프로토콜의 소켓 옵션입니다. 이 옵션을 켜면 운영 체제는 연결이 유휴 상태인지 감지하면 연결이 아직 살아 있는지 확인하기 위해 일정 시간 동안 피어에게 KeepAlive 프로브를 자동으로 보냅니다. 상대방이 응답하지 않으면 연결이 연결이 끊어진 것으로 간주됩니다.
SO_KEEPALIVE 사용의 이점 :
단절로 인한 "가짜 죽음"연결을 줄입니다.
자원을 절약하기 위해 잘못된 연결을 제 시간에 해제하십시오.
채팅 서비스, 메시지 푸시 등과 같이 오랫동안 연결 해야하는 응용 프로그램에 적합합니다.
PHP는 소켓에 대한 다양한 옵션을 설정할 수있는 socket_set_option 함수를 제공합니다. 사용의 예는 다음과 같습니다.
<?php
// 만들다TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create failed: " . socket_strerror(socket_last_error()));
}
// 서버에 연결하십시오(예제 주소 사용법gitbox.net)
$server = 'gitbox.net';
$port = 80;
if (!socket_connect($socket, $server, $port)) {
die("socket_connect failed: " . socket_strerror(socket_last_error($socket)));
}
// 열려 있는SO_KEEPALIVE옵션
if (!socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1)) {
die("socket_set_option SO_KEEPALIVE failed: " . socket_strerror(socket_last_error($socket)));
}
echo "SO_KEEPALIVE已열려 있는,긴 연결이 시작되었습니다。\n";
// 여기에서 후속 데이터를 읽고 쓸 수 있습니다
socket_close($socket);
?>
위의 코드는 socket_set_option을 통해 SO_KEEPALIVE를 가능하게하며 운영 체제를 통해 Keep-Alive Detection 패킷을 자동으로 보내는 데 도움이됩니다.
Linux의 SO_KEEPALIVE는 Keep-Alive 기능 만 가능하며 구성이 필요합니다.
TCP_KEEPALIVE_TIME : 몇 초가 유휴 상태 인 수, 기본 7200 초 (2 시간)를 보내기 시작하십시오.
TCP_KEEPALIVE_INTVL : 감지 패킷 전송 간격은 기본적으로 75 초입니다.
TCP_KEEPALIVE_PROBES : 감지 패킷이 전송되는 횟수는 9 배입니다.
이러한 매개 변수는 활성을 유지하는 민감도와 연결이 끊김의 감지 속도에 영향을 미칩니다. 시스템 명령을 통해 일시적으로 수정할 수 있습니다.
# 유휴 상태를 설정하십시오10몇 초 만에 살아 있기 시작합니다
echo 10 > /proc/sys/net/ipv4/tcp_keepalive_time
# 감지 패킷 간격을 설정하십시오5두번째
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# 감지 패킷이 전송되는 횟수를 설정합니다.32 차
echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
PHP 코드에서 이러한 매개 변수를 자동으로 설정하려면 일반적으로 시스템 명령을 호출하거나 확장자 인터페이스를 사용해야하지만 대부분의 경우 SO_KEEPALIVE 만 필요에 맞게 활성화하면됩니다.
PHP의 Socket_set_option을 통해 SO_KEEPALIVE를 켜고 시스템의 합리적인 구성과 협력하여 활성 매개 변수를 유지하면 TCP의 긴 연결 유지 보수를 효과적으로 실현하고 안정적인 연결을 보장하고 단절을 적시에 감지하고 응용 프로그램 신뢰성을 향상시킬 수 있습니다.
소켓을 만들면 socket_set_option을 호출합니다 ($ socket, sol_socket, so_keepalive, 1)
감지 효율을 향상시키기 위해 살아있는 매개 변수를 유지하도록 시스템을 조정하십시오.
하트 비트 패킷 메커니즘과 결합하여 연결 안정성을 더욱 향상시킵니다.
긴 연결 유지 관리는 복잡한 엔지니어링 문제이지만 SO_KEEPALIVE 의 원칙과 사용 방법을 마스터하는 것은 긴 연결을 실현하기위한 기본 도구입니다.