>  기사  >  백엔드 개발  >  PHP 대기열을 구현하는 방법

PHP 대기열을 구현하는 방법

藏色散人
藏色散人원래의
2020-11-10 09:58:432717검색

PHP에서 대기열을 구현하는 방법: 먼저 "artisan.php"라는 새 파일을 만든 다음 "php artisan"을 통해 대기열을 실행합니다. 마지막으로 redis 클라이언트에 들어가서 "lpush listname a b c d e f g" 명령을 입력합니다.

PHP 대기열을 구현하는 방법

추천: "PHP Video Tutorial"

PHP 대기열 구현 원리(laravel)

laravel 프레임워크를 사용해 본 사람이라면 누구나 자체 대기열 기능이 있다는 것을 알고 있을 것입니다. PHP는 시간 초과 메커니즘을 갖춘 스크립트입니다. 왜 큐를 계속 실행할 수 있나요?

새 파일 queue.php

<?php
while(true){
  echo 1;
  sleep(1);    
}
를 생성합니다

그런 다음 명령줄에서 php queue.php를 실행합니다

오랜 시간을 기다린 후에는 매초마다 1이 출력되는 것을 볼 수 있습니다. 어, 놀랍습니다. 왜 그렇지 않습니까? PHP 시간 초과가 아닌가요?

예, 시간 초과되지 않습니다. 이유는 무엇입니까?

A: 실제로 PHP 실행 스크립트는 시간 초과되지 않습니다. 504와 같이 웹페이지에 표시되는 시간 초과는 Apache, Nginx 및 PHP에서 설정한 시간 초과입니다. PHP 명령줄 실행 파일은 PHP 구성 파일을 사용하지 않기 때문에 시간에 따라 결정되므로 기본적으로 시간 초과가 발생하지 않습니다.

ps -ef | grep php

PHP 큐 프로세스가 있다는 것을 알게 될 것입니다

우리는 PHP 시간 초과 문제를 해결했습니다

큐의 원리를 살펴보겠습니다

새 파일 artisan.php

<?php
$redis = new Redis();
$redis->connect(&#39;127.0.0.1&#39;,6379);
while(1){
        $res = $redis->lpop(&#39;listname&#39;);
        if($res){echo $res."\r\n";}
        sleep(1);
}

그런 다음 php artisan이 다음을 실행합니다. queue

새 창을 만들고 redis 클라이언트에 들어가서 다음 명령을 입력하세요

lpush listname a b c d e f g

PHP artisan의 대기열은 제가 방금 redis에 푸시한 값을 계속해서 인쇄하는 것을 볼 수 있습니다

사실 laravel의 대기열은 이 원칙에 따르면 redis를 캐리어로 지원할 뿐만 아니라 다른 데이터베이스도 더 많이 사용할 수 있습니다

누군가가 php artisan.php를 시작하면 창을 닫으면 쓸모가 없느냐고 묻습니다. , 아니요, Linux는 여전히 백그라운드에서 실행될 수 있습니다.

명령 뒤에 &를 추가하거나 nohup... $를 추가하여 백그라운드에서 실행할 수도 있습니다. 물론 실행을 위해 crontab 예약 작업에 추가할 수도 있습니다.

아아아아

위 내용은 PHP 대기열을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.