PHP를 사용하여 긴 폴링 게시-구독 패턴을 구현하는 방법

PHPz
풀어 주다: 2023-04-05 13:35:58
원래의
694명이 탐색했습니다.

현대 웹 개발에서 실시간 통신은 매우 중요한 요구 사항이 되었으며 메시지 대기열과 게시-구독 모델은 웹 애플리케이션에서 실시간 통신을 실현하기 위한 표준 솔루션이 되었습니다. 이 기사에서는 PHP를 사용하여 장기 폴링 게시-구독 모드를 구현하는 방법을 소개합니다.

롱 폴링이란 무엇인가요?

기존 웹 애플리케이션에서는 클라이언트가 서버에 요청을 보내고, 서버는 요청을 받은 후 즉시 응답을 반환합니다. 롱 폴링은 클라이언트 요청을 받은 후 서버가 일정 시간 동안 기다려 새 메시지가 없는 경우 새 메시지가 있을 때까지 연결을 유지하는 고급 웹 애플리케이션 아키텍처입니다. 새 메시지가 도착하면 클라이언트에 응답이 반환됩니다.

따라서 긴 폴링 구현은 기존 요청 응답 모드보다 더 효율적이고 서버 리소스를 절약하며 실시간 통신 요구 사항에 더 부합합니다.

PHP를 사용하여 긴 폴링을 구현하는 방법은 무엇입니까?

아래에서는 PHP와 메시지 큐를 사용하여 롱 폴링을 구현하는 방법을 소개합니다.

  1. Message Queue 설치

PHP를 사용하여 긴 폴링을 구현하기 전에 Message Queue를 설치해야 합니다. 현재 널리 사용되는 메시지 대기열에는 RabbitMQ, ZeroMQ 및 Beanstalkd가 있습니다. 이 기사에서는 Beanstalkd를 사용하여 메시지 대기열을 구현합니다.

먼저 Beanstalkd를 다운로드하고 설치해야 합니다. Ubuntu 시스템에서는 다음 명령을 사용하여 설치할 수 있습니다.

sudo apt-get install beanstalkd

다른 운영 체제를 사용하는 경우 Beanstalkd 공식 웹사이트에서 해당 버전을 다운로드하여 설치할 수 있습니다.

설치가 완료된 후 다음 명령을 사용하여 Beanstalkd를 시작할 수 있습니다.

sudo service beanstalkd start

  1. PHP 코드 작성

아래에서는 예제를 사용하여 Beanstalkd를 사용하여 긴 폴링을 구현하는 방법을 보여줍니다. PHP에서.

먼저 PHP 파일에서 Beanstalkd를 연결합니다.

$beanstalk = new Pheanstalk('127.0.0.1');

그런 다음 메시지를 게시하는 함수를 정의해야 합니다.

functionPublish($channel, $message ){

global $beanstalk; $data = json_encode(array('channel' => $channel, 'message' => $message)); $beanstalk->useTube("pubsub") ->put($data, Pheanstalk::DEFAULT_PRIORITY, 0, 10);
로그인 후 복사

}

이 함수의 기능은 "pubsub"라는 파이프에 메시지를 보내는 것입니다. 필요에 따라 다른 파이프에 메시지를 보낼 수 있습니다.

그런 다음 메시지를 구독하는 함수를 정의해야 합니다.

function subscribe($channel, $callback){

global $beanstalk; $beanstalk->watch($channel); while (true) { $job = $beanstalk->reserve(); if ($job) { $data = json_decode($job->getData(), true); if ($data['channel'] == $channel) { call_user_func($callback, $data['message']); $beanstalk->delete($job); break; } else { $beanstalk->bury($job); } } }
로그인 후 복사

}

이 함수의 기능은 메시지가 도착할 때 지정된 파이프를 듣는 것입니다. , $ 콜백 함수를 실행하고 대기열에서 메시지를 삭제합니다.

다음으로 클라이언트 측에서 JavaScript 코드를 사용하여 긴 폴링을 구현해야 합니다.

  1. 클라이언트 JavaScript 코드

클라이언트에서는 두 가지 기능을 정의해야 합니다. 하나는 메시지를 보내는 기능이고, 다른 하나는 메시지를 받는 기능이다. 다음은 샘플 코드입니다.

functionPublish(channel, message){

// 发送消息 $.ajax({ type: 'POST', url: 'publish.php', data: {channel: channel, message: message}, success: function(data){} });
로그인 후 복사

}

function subscribe(channel, callback){

// 接收消息 function poll(){ $.ajax({ type: 'GET', url: 'subscribe.php', data: 'channel=' + channel, dataType: 'json', success: function(data){ if (data && data.message){ callback(data.message); } poll(); }, error: function(){ setTimeout(poll, 5000); } }); } poll();
로그인 후 복사

}

이 예에서는 jQuery를 사용하여 POST 요청을 보냅니다. 메시지를 보내려면 GET 요청을 사용하여 메시지를 받으세요.

긴 폴링에서는 응답이 수신될 때까지 클라이언트가 연결 상태를 유지한다는 점에 유의해야 합니다. 서버가 유휴 상태일 때 연결을 닫지 않도록 하려면 페이지에 다음 코드를 추가하여 시간 초과를 방지해야 합니다.

이 예에서는 페이지가 600초마다 새로 고쳐집니다.

결론

PHP와 메시지 대기열을 사용하면 실시간 통신 요구 사항을 충족하기 위해 긴 폴링 게시-구독 모델을 쉽게 구현할 수 있습니다. 이 방법은 웹 응용 프로그램의 실시간 데이터 교환 및 통신에 매우 일반적으로 사용됩니다. 이는 응용 프로그램에서 서버 성능을 소모하는 폴링 및 기타 방법의 사용을 크게 줄이고 웹 응용 프로그램의 확장성을 향상시킬 수 있습니다.

위 내용은 PHP를 사용하여 긴 폴링 게시-구독 패턴을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!