php membenarkan kumpulan proses Swoole | Pool untuk melaksanakan sambungan berterusan Redis
Modul ini melaksanakan kumpulan proses berdasarkan pengurusan proses Pengurus SwooleServer. Ia boleh mengurus pelbagai proses kerja Berbanding dengan Proses untuk melaksanakan pelbagai proses, ProcessPool lebih mudah dan mempunyai tahap pengkapsulan yang lebih tinggi tanpa menulis terlalu banyak kod, mereka boleh mencipta gaya coroutine tulen dan boleh digunakan berbilang teras program pelayan CPU.
Kumpulan proses Swoole melaksanakan pembacaan data redis
Dalam kes berikut, kumpulan proses Redis dimulakan melalui WorkerStart dan data senarai Redis dibaca secara berterusan apabila WorkerStop terputus semua sambungan Kitar semula semua proses kanak-kanak.
Langkah 1: Kod pengekodan
Fail: d10.php
<?php use Swoole\Process; use Swoole\Coroutine; // 指定5个工作进程 $pool = new Process\Pool(5); // 设置启用协程 $pool->set(['enable_coroutine' => 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('127.0.0.1', 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();
Langkah 2: Mulakan perkhidmatan Redis dan tulis data senarai melalui klien
Ini case memerlukan PHP untuk memasang sambungan redis
# 通过redis客户端连接 ./redis-cli 127.0.0.1:6379> lpush key1 'world'
Salin kod
Langkah 3: Jalankan d10.php
php d10.php
Langkah 4: Lihat proses
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
Langkah 5: Hasil keluaran
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
fail d10.php akan sentiasa disekat selepas dijalankan dan terus membaca data senarai redis Sebaik sahaja output dalam senarai Redis, ia akan muncul dan dicetak pada skrin dengan serta-merta.
Atas ialah kandungan terperinci Bagaimanakah php membolehkan kumpulan proses Swoole/Pool untuk melaksanakan sambungan berterusan Redis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!