
server
<?php
//多进程
$pool = new Swoole\Process\Pool(10);//进程池
//业务处理逻辑,时间触发
$pool->on('workerStart',function($p,$workerId){
//执行完业务逻辑就会关闭
echo $workerId,'启动',PHP_EOL;
//从redis中读物任务
$redis = new Redis();//每个进程独占一个连接资源
$redis->connect('127.0.0.1');
while(true){
var_dump($redis->rpop('yourkeyname'))
usleep(10000);
}
});
$pool->on('workerStop',function($p,$workerId){
echo $workerId,'关闭',PHP_EOL;
});
$pool->start();//启动
client
<?php
//多进程
$pool = new Swoole\Process\Pool(10);//进程池
//业务处理逻辑,时间触发
$pool->on('workerStart',function($p,$workerId){
//执行完业务逻辑就会关闭
echo $workerId,'启动',PHP_EOL;
//从redis中读物任务
$redis = new Redis();//每个进程独占一个连接资源
$redis->connect('127.0.0.1');
while(true){
usleep(10000);
}
});
$pool->on('workerStop',function($p,$workerId){
echo $workerId,'关闭',PHP_EOL;
});
//传递消息(命令),
$pool->listen('127.0.0.1',8089);//端口自定
$pool->start();//启动
调用

主进程(管理进程)
工作进程(worker进程)
worker进程执行完毕,主进程就拉起一个新的worker进程
本文介绍了如何使用SwoolePHP扩展创建多进程的进程池,工作进程从Redis中按需读取任务并执行,主进程管理新的worker进程。涉及`workerStart`和`workerStop`事件监听以及进程间通信。

被折叠的 条评论
为什么被折叠?



