Maison > base de données > Redis > le corps du texte

Comment PHP permet-il au pool de processus Swoole/Pool d'implémenter des connexions persistantes Redis ?

WBOY
Libérer: 2023-05-27 17:55:12
avant
1120 Les gens l'ont consulté

php permet au pool de processus Swoole|Pool d'implémenter des connexions persistantes Redis

Ce module implémente le pool de processus basé sur la gestion des processus Manager de SwooleServer. Il peut gérer plusieurs processus de travail. Par rapport à Process pour implémenter plusieurs processus, ProcessPool est plus simple et a un niveau d'encapsulation plus élevé. Les développeurs peuvent implémenter des fonctions de gestion de processus sans écrire trop de code, ils peuvent créer un style de coroutine pur et utiliser. programme de serveur CPU à plusieurs cœurs.

Le pool de processus Swoole implémente la lecture des données Redis

Dans le cas suivant, le pool de processus Redis est démarré via WorkerStart et les données de la liste Redis sont lues de manière persistante ; tous les processus enfants sont recyclés lorsque WorkerStop déconnecte toutes les connexions.

Première étape : Encodage du code

Fichier : d10.php

<?php

use Swoole\Process;
use Swoole\Coroutine;

// 指定5个工作进程
$pool = new Process\Pool(5);
// 设置启用协程
$pool->set([&#39;enable_coroutine&#39; => true]);

/**
* onWorkerStart 子进程启动
* @param \Swoole\Process\Pool $pool Pool对象
* @param int $workerId   WorkerId当前工作进程的编号,底层会对子进程进行标号
**/
$pool->on("WorkerStart", function (Process\Pool $pool, $workerId) {
// 输出当前工作进程
   echo "Worker #{$workerId} is started\n";

   // 实例化化连接redis
   $redis = new Redis();
   $redis->pconnect(&#39;127.0.0.1&#39;, 6379);
   // 指定redis键
   $key = "key1";

   // 循环读取列表数据
   while (true) {
    // 弹出列表最后一个元素
       $msgs = $redis->brpop($key, 2);
       // 元素值为空则跳过
       if ( $msgs == null) {
           continue;
       }
       // 打印获取的值
       var_dump($msgs);
       echo "Processed by Worker#{$workerId}\n";
   }
});

// 子进程结束
$pool->on("WorkerStop", function ($pool, $workerId) {
   echo "Worker#{$workerId} is stopped\n";
});

// 启动工作进程
$pool->start();
Copier après la connexion

Deuxième étape : Démarrez le service Redis et écrivez les données de la liste via le client

Ce cas nécessite que PHP installe l'extension redis

# 通过redis客户端连接
./redis-cli

127.0.0.1:6379> lpush key1 &#39;world&#39;
Copier après la connexion

Copiez le code

Troisième étape : Exécutez d10.php

php d10.php
Copier après la connexion

Étape 4 : Vérifiez le processus

ps aux | grep php
root        938  0.0  1.2 129164 12412 ?        Ss   Apr21   0:00 php-fpm: master process (/usr/local/php-8.0.1/etc/php-fpm.conf)
www         951  0.0  0.6 129164  6636 ?        S    Apr21   0:00 php-fpm: pool www
www         952  0.0  0.6 129164  6640 ?        S    Apr21   0:00 php-fpm: pool www
root      12327  0.0  1.2 126992 12800 pts/2    S+   00:02   0:00 php d10.php
root      12328  0.0  0.7 131096  7444 pts/2    S+   00:02   0:00 php d10.php
root      12329  0.0  0.7 131096  7448 pts/2    S+   00:02   0:00 php d10.php
root      12330  0.0  0.7 131096  7448 pts/2    S+   00:02   0:00 php d10.php
root      12331  0.0  0.7 131096  7448 pts/2    S+   00:02   0:00 php d10.php
root      12332  0.0  0.7 131096  7448 pts/2    S+   00:02   0:00 php d10.php
root      12355  0.0  0.0 112812   976 pts/3    R+   00:09   0:00 grep --color=auto php
Copier après la connexion

Étape 5 : Afficher le résultat

php d10.php

Worker #1 is started
Worker #2 is started
Worker #3 is started
Worker #4 is started
Worker #0 is started
array(2) {
 [0]=>
 string(4) "key1"
 [1]=>
 string(5) "world"
}
Processed by Worker#1
Copier après la connexion

Le fichier d10.php sera toujours bloqué après l'exécution et continuera à lire les données de la liste Redis une fois le fichier redis terminé. La liste Redis est la sortie qui apparaît immédiatement et s'imprime à l'écran.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!