기존 웹 응용 프로그램에서는 짧은 연결이 일반적으로 통신하는 데 사용됩니다. 클라이언트가 요청을 서버로 보낼 때마다 서버는 요청을 처리하고 응답을 반환 한 다음 즉시 연결을 끊습니다. 그러나 실시간 채팅, 푸시 메시지 등과 같은 일부 특정 응용 프로그램 시나리오에서는 긴 연결이 더 나은 실시간 및 대화식 경험을 제공 할 수 있습니다. 이 기사는 특정 코드 예제와 함께 PHP에서 효율적인 장기 연결 통신을 달성하는 방법을 소개합니다.
PHP에서 장기 연결 커뮤니케이션을 구현하려면 폴링과 웹 소켓의 두 가지 주요 기술이 있습니다.
폴링은 간단한 장기 통신 기술입니다. 기본 원칙은 클라이언트가 지속적으로 요청을 서버에 보낸다는 것입니다. 요청을 수신 한 후 서버는 클라이언트에게 푸시해야 할 새로운 데이터가 있는지 확인합니다. 있는 경우 데이터를 즉시 반환하십시오. 그렇지 않은 경우 새 데이터를 사용할 수있을 때까지 연결을 유지하십시오. 폴링의 단점은 많은 수의 유효하지 않은 요청을 생성하여 서버의 부담을 증가시킬 수 있다는 것입니다.
간단한 폴링 샘플 코드는 다음과 같습니다.
<?php // 서버 측 $data = "Hello, World!"; // 푸시 할 데이터 while (true) { $newData = checkNewData(); // 새 데이터를 확인하십시오 if ($newData) { echo $newData; flush(); // 즉시 응답을 보내십시오 break; } usleep(1000); // 잠1밀리 초,피하다CPU너무 높은 점유 } // 고객 set_time_limit(0); // 타임 아웃 제한을 취소하십시오 while (true) { $response = sendRequest(); // 요청을 보내십시오 if ($response) { echo $response; } usleep(1000); // 잠1밀리 초 } ?>
WebSocket은 전이중 통신을 지원하는보다 효율적이고 강력한 장기 연결된 통신 프로토콜로 클라이언트와 서버가 요청을 기다리지 않고 서로 메시지를 보낼 수 있습니다. 이로 인해 WebSocket은 온라인 게임, 실시간 채팅, 주식 푸시 등과 같은 실시간 요구 사항이 높은 응용 프로그램 시나리오에 매우 적합합니다.
간단한 WebSocket 샘플 코드는 다음과 같습니다.
<?php // 서버 측 $server = new WebSocketServer("localhost", 8000); // 만들다WebSocket서버 객체 while (true) { $client = $server-> 수용하다(); // 클라이언트 연결을 허용하는 동안 (true) { $ message = $ client-> 수신 (); // 클라이언트 메시지를 받기 ($ message) { // 프로세스 클라이언트 메시지 // $ data = processMessage ($ message); // 처리 된 데이터를 클라이언트에게 푸시하십시오 // $ client-> send ($ data); } } $ client-> close (); // 클라이언트 연결 닫기} // 클라이언트 $ socket = new WebSocketClient ( "ws : // localhost : 8000"); // WebSocket Client Object whike (true) {{ $ message = $ socket-> 수신 (); // ($ message) {if if if if if server 메시지를받습니다. // 프로세스 서버 메시지 // $ data = processMessage ($ message); // 처리 된 데이터를 사용자에게 표시 // echo $ data; } // 서버로 메시지를 보내십시오 // $ socket-> send ($ message); } ?>
이 기사에서는 PHP에서 장기 연결 커뮤니케이션을 구현하는 두 가지 일반적인 방법 인 Polling 및 WebSocket을 설명합니다. 각 방법은 장점과 단점이 있으며 올바른 솔루션을 선택하려면 특정 응용 프로그램 요구에 따라 트레이드 오프가 필요합니다. 이 샘플 코드를 통해 실시간 데이터 상호 작용을 달성하기 위해 장기 연결된 통신 기술을 더 잘 이해하고 적용 할 수 있기를 바랍니다.