서버 푸시는 백엔드 개발 중에, 특히 응용 프로그램이 클라이언트에 실시간으로 데이터를 보내야 할 때 일반적인 요구 사항입니다. PHP는 WebSocket과 Server Sent Events (SSE)의 두 가지 기술을 통해 서버 푸시를 구현할 수 있습니다. 이 두 기술에는 고유 한 장점과 단점이 있으며 올바른 기술을 선택하면 실제 개발 문제를 해결하는 데 도움이 될 수 있습니다.
WebSocket은 클라이언트와 서버 간의 지속적인 연결을 설정하고 실시간으로 양방향 데이터 전송을 수행 할 수있는 전체 이중 프로토콜입니다. PHP에서는 Swoole Extensions를 사용하여 WebSocket을 구현할 수 있습니다.
먼저 Swoole Extension이 설치되어 있는지 확인하고 다음 명령을 통해 설치할 수 있습니다.
PECL SWOOLE 설치
그런 다음 PHP에서 WebSocket 서버를 만들면 다음 코드를 참조 할 수 있습니다.
$ server = 새로운 SwoolewebsocketServer ( "0.0.0.0", 9501); $ server-> on ( "Open", function (swoolewebsocketServer $ server, $ request) { 에코 "연결"; }); $ server-> on ( "message", function (swoolewebsocketserver $ server, $ frame) { echo "수신 메시지 : {$ frame-> data}"; // 푸시 로직 $ server-> push ($ frame-> fd, "server message"); }); $ server-> on ( "close", function (swoolewebsocketserver $ server, $ fd) { 에코 "연결이 끊어졌다"; }); $ server-> start ();
이 코드는 세 가지 이벤트 콜백을 정의하는 WebSocket 서버를 생성합니다 : Open, Message 및 Close. 메시지 이벤트 콜백에서 서버는 수신 된 메시지를 기반으로 데이터를 처리하고 푸시 할 수 있습니다.
SSE (Server-Sent Events)는 서버가 데이터 흐름을 클라이언트로 푸시 할 수있는 단방향 통신 프로토콜입니다. SSE를 사용하는 경우 클라이언트는 서버에서만 메시지를 수신 할 수 있으며 서버로 데이터를 적극적으로 보낼 수 없습니다.
다음은 SSE의 구현 예입니다.
헤더 ( "내용 유형 : 텍스트/이벤트 스트림"); 헤더 ( "캐시 제어 : 없음"); 헤더 ( "연결 : recop-alive"); $ count = 0; while (true) { echo "data : {$ count} \ n \ n"; 플러시(); // 로직 푸시 $ count ++; 수면 (1); }
위의 코드는 응답 헤더 정보를 설정하고 무한 루프를 사용하여 데이터를 주기적으로 클라이언트에게 푸시합니다. 지연을 설정하면 푸시 주파수를 제어 할 수 있습니다.
WebSocket 또는 SSE를 사용하든 PHP는 서버 푸시 기능을 구현할 수 있습니다. WebSocket은 양방향 실시간 통신에 적합하지만 SSE는 단방향 데이터 흐름에 적합합니다. 개발자는 특정 요구에 따라 적절한 기술을 선택하고 실제 시나리오를 기반으로 푸시 로직을 작성할 수 있습니다.