Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie eine PHP-Warteschlange

So implementieren Sie eine PHP-Warteschlange

藏色散人
藏色散人Original
2020-11-10 09:58:432706Durchsuche

So implementieren Sie die Warteschlange in PHP: Erstellen Sie zuerst eine neue Datei „artisan.php“, führen Sie dann die Warteschlange über „php artisan“ aus und geben Sie schließlich den Befehl „lpush listname a b c d e f g“ ein.

So implementieren Sie eine PHP-Warteschlange

Empfohlen: „PHP-Video-Tutorial

Prinzip der PHP-Warteschlangenimplementierung (Laravel)

Jeder, der das Laravel-Framework verwendet hat, weiß, dass es eine eigene Warteschlangenfunktion hat. PHP ist nur ein Skript mit einem Timeout-Mechanismus. Warum können wir die Warteschlange weiterhin ausführen?

Wir erstellen eine neue Datei queue.php

<?php
while(true){
  echo 1;
  sleep(1);    
}

Dann führen wir php queue.php in der Befehlszeile aus

Sie werden feststellen, dass jede Sekunde eine 1 ausgegeben wird, eh, es ist erstaunlich, warum das so ist Gibt es kein PHP-Timeout?

Ja, es kommt nicht zu einer Zeitüberschreitung. Warum?

A: Tatsächlich kommt es beim PHP-Ausführungsskript nicht zu einer Zeitüberschreitung, z. B. 504, sind die von Apache, Nginx und PHP festgelegten Zeitüberschreitungen Dies wird durch die Zeit bestimmt, da die PHP-Befehlszeilenausführungsdatei nicht die PHP-Konfigurationsdatei verwendet und daher standardmäßig keine Zeitüberschreitung aufweist.

ps -ef | grep php

Sie werden feststellen, dass es einen PHP-Warteschlangenprozess gibt.

Wir haben das Problem des PHP-Timeouts gelöst Warteschlange

Erstellen wir ein neues Fenster, rufen Sie den Redis-Client auf und geben Sie den folgenden Befehl ein

<?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);
}

Sie werden feststellen, dass die Warteschlange von PHP Artisan kontinuierlich den Wert ausgibt, den ich gerade in Redis verschoben habe.

Tatsächlich basiert die Warteschlange von Laravel Nach diesem Prinzip unterstützt es nicht nur Redis als Träger, sondern Sie können auch weitere andere Datenbanken verwenden. Jemand wird fragen: Wenn ich php artisan.php starte, ist es dann nutzlos, wenn ich das Fenster schließe? , nein, Linux kann immer noch im Hintergrund ausgeführt werden

Fügen Sie einfach ein & nach dem Befehl hinzu, oder nohup... $, um es im Hintergrund auszuführen. Natürlich können Sie es auch zur geplanten Ausführung von crontab hinzufügen.

lpush listname a b c d e f g

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine PHP-Warteschlange. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn