>백엔드 개발 >PHP 튜토리얼 >PHP가 Swoole/Pool 프로세스 풀이 Redis 영구 연결을 구현하도록 허용하는 방법에 대해 이야기해 보겠습니다.

PHP가 Swoole/Pool 프로세스 풀이 Redis 영구 연결을 구현하도록 허용하는 방법에 대해 이야기해 보겠습니다.

藏色散人
藏色散人앞으로
2023-02-08 10:50:294216검색

이 기사는 PHP에 대한 관련 지식을 제공하며, 주로 PHPphp를 사용하여 Redis 지속적인 연결을 달성하기 위해 Swoole/Pool 프로세스 풀을 활성화하는 방법을 소개합니다. 관심 있는 친구들이 함께 살펴보는 것이 도움이 되기를 바랍니다. .

PHP가 Swoole/Pool 프로세스 풀이 Redis 영구 연결을 구현하도록 허용하는 방법에 대해 이야기해 보겠습니다.

php를 사용하면 Swoole|Pool 프로세스 풀이 SwooleServer의 Manager 관리 프로세스 모듈을 기반으로 Redis 영구 연결

프로세스 풀을 구현할 수 있습니다. 다중 작업 프로세스를 구현하는 Process에 비해 ProcessPool은 더 간단하고 캡슐화 수준이 높으며, 개발자는 너무 많은 코드를 작성하지 않고도 프로세스 관리 기능을 구현할 수 있으며 순수한 코루틴 스타일을 활용할 수 있습니다. 다중 코어.

Swoole 프로세스 풀은 Redis 데이터 읽기를 구현합니다.

다음 경우 Redis 프로세스 풀은 WorkerStart를 통해 시작되고 Redis 목록 데이터는 WorkerStop이 모든 연결을 끊을 때 지속적으로 읽혀집니다.

1단계: 코드 인코딩

파일: 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();

2단계: Redis 서비스를 시작하고 클라이언트를 통해 목록 데이터 쓰기

이 경우 Redis 확장을 설치하려면 PHP가 필요합니다

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

127.0.0.1:6379> lpush key1 &#39;world&#39;

코드 복사

세 번째 단계: d10.php 실행

php d10.php

4단계: 프로세스 확인

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

5단계: 결과 출력

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

d10.php 파일은 실행 후 항상 차단되며 Redis 목록 데이터는 항상 한 번 읽혀집니다. Redis 목록은 즉시 Output이 팝업되어 화면에 인쇄됩니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP가 Swoole/Pool 프로세스 풀이 Redis 영구 연결을 구현하도록 허용하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 ziruchu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제