基于Swoole和Redis实现的并发队列处理系统
背景 由于 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 nn"