
由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的。为了完成这些异步操作,我们做了一个基于Redis队列任务系统。
大家知道,一个消息队列处理系统主要分为两大部分:消费者和生产者。
在我们的系统中,主系统作为生产者,任务系统作为消费者。
具体的工作流程如下:
1、主系统将需要需要处理的任务名称+任务参数push到队列中。
2、任务系统实时的对任务队列进行pop,pop出来一个任务就fork一个子进程,由子进程完成具体的任务逻辑。
具体代码如下:
/**
* 启动守护进程
*/
public function runAction() {
Tools::log_message('ERROR', 'daemon/run' . ' | action: restart', 'daemon-');
while (true) {
$this->fork_process();
}
exit;
}
/**
* 创建子进程
*/
private function fork_process() {
$ppid = getmypid();
$pid = pcntl_fork();
if ($pid == 0) {//子进程
$pid = posix_getpid();
//echo "* Process {$pid} was created \n\n";
$this->mq_process();
exit;
} else {//主进程
PHP Swoole与Redis构建的并发队列处理系统

本文介绍了如何使用PHP的Swoole扩展和Redis构建一个并发队列处理系统,以解决PHP单进程限制和并发问题。通过在任务系统中创建子进程并利用信号处理器控制进程数,实现了高效的任务处理。新系统在1G单核服务器上能支持800并发执行1-3秒的任务。
最低0.47元/天 解锁文章
586

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



