현재 위치: > 최신 기사 목록> PHP 대기열에서 지연된 메시지 전송에 대한 실제 방법 및 예제

PHP 대기열에서 지연된 메시지 전송에 대한 실제 방법 및 예제

M66 2025-07-23

PHP 큐를 통해 메시지 보내는 지연이 달성됩니다

개발 과정에서 SMS 검증 코드, 시스템 알림 등과 같은 메시지 전송을 지연시켜야 할 필요성은 매우 일반적입니다. PHP 대기열을 사용하면 메시지 지연 전송을 효과적으로 인식 할 수 있으며 비동기 처리의 효과는 메시지를 큐에 넣고 지연 시간을 설정함으로써 달성됩니다. 이 기사는 Redis를 큐 서버로 사용하는 솔루션을 소개하며 신속하게 시작할 수 있도록 완전한 PHP 샘플 코드가 장착되어 있습니다.

Redis를 큐 서버로 사용하십시오

Redis는 목록 및 주문 컬렉션을 포함하여 다양한 데이터 구조를 지원하는 고성능 인 메모리 데이터베이스로 메시지 대기열로 사용하기에 이상적입니다. 먼저 서버에 Redis 및 해당 PHP 확장을 설치해야합니다. 우분투 시스템에서는 다음 명령을 사용하여 설치할 수 있습니다.

 Sudo apt-get 설치 Redis-Server
sudo apt-get 설치 PHP-Redis

설치가 완료되면 다음 코드는 Redis 서버에 연결하는 방법을 보여줍니다.

 $ redis = new redis ();
$ redis-> connect ( '127.0.0.1', 6379);

지연된 메시지 보내기를 구현합니다

다음 예제는 Redis 대기열에 메시지를 추가하고 폴링 및 만료 된 메시지를 보내는 동안 지연된 발송 시간을 설정하는 방법을 보여줍니다.

 // 큐에 메시지를 추가하고 지연 시간 (초)을 설정합니다.
함수 addDelayEdMessage ($ 메시지, $ 지연)
{
    글로벌 $ redis;

    // 메시지의 전송 타임 스탬프를 계산합니다 $ delayedtime = time () + $ delain;

    // 순서 세트에 메시지를 추가하면 점수는 보내는 시간 $ redis-> zadd ( 'Delayed_Queue', $ DelayedTime, $ 메시지);
}

// 만료 메시지를 확인하고 보내기 함 함수 checkDelayEdMessages ()
{
    글로벌 $ redis;

    while (true) {
        // 현재 시간 전에 전송 해야하는 메시지를 가져옵니다. $ emsag

        if (count ($ message)> 0) {
            // 여기에서 echo를 사용하여 메시지 보내기 작업을 시뮬레이션하십시오. "메시지 보내기 :". $ 메시지 [0]. php_eol;

            // 보낸 메시지를 제거합니다 $ remis-> zrem ( 'Delayed_queue', $ message [0]);
        } 또 다른 {
            // 전송 될 메시지가없고 루프에서 벗어납니다.
        }
    }
}

// 샘플 지연 메시지 추가 AddDelayEdMessage ( 'Message 1', 300); // addDelayEdMessage를 보내십시오 ( 'Message 2', 600); // 10 분 후 보내기 // weckDelayEdMessages () 보내기 수행 ();

위의 코드에서 AddDelayEdMessage 함수는 메시지를 Redis 주문 세트에 추가하고 지연 효과를 달성하기 위해 미래의 특정 시점 (즉, 지연 시간)으로 설정됩니다. CheckDelayEdMessages 함수는 현재 시간 전에 메시지를 지속적으로 확인하고 시뮬레이션이 전송 된 후 큐에서 제거하여 메시지가 반복적으로 전송되지 않도록합니다.

요약

PHP와 Redis를 결합하여 메시지 대기열을 구현하면 메시지 지연 요구 사항을 효율적으로 처리 할 수 있습니다. Redis 주문 컬렉션은 매우 편리한 시간 정렬 기능을 제공하여 지연된 메시지 관리를 간단하고 직관적으로 만듭니다. 이 솔루션을 마스터하면 시스템의 비동기 처리 기능 및 성능이 크게 향상 될 수 있습니다.