十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容主要讲解“php_swoole对进程的基本操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php_swoole对进程的基本操作”吧!
创新互联建站是一家专注网站建设、网络营销策划、小程序制作、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十载以来,已经为数千家宴会酒店设计各业的企业公司提供互联网服务。现在,服务的数千家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
在以往的开发项目中,要操作进程就会使用PHP自带的pcntl拓展。但是pcntl存在着许多的不足:
pcntl没有提供进程间通信的功能
pcntl不支持重定向标准输入和输出
pcntl只提供了fork这样原始的接口,容易使用错误
这边我们使用swoole进程管理模块,用来替代PHP
的pcntl
;
场景:日常任务中,有时需要通过php脚本执行一些日志分析,队列处理等任务,当数据量比较大时,可以使用多进程来处理。
准备:安装PHP_swoole拓展;
write($data)
向管道内写入数据。$data
的长度在Linux
系统下最大不超过8K
,MacOS/FreeBSD
下最大不超过2K
start():
执行fork调用,启动子进程。
/** 创建子进程,将数据写入管道,然后启动子进程 */ $process = new \swoole_process([$this, 'sonProcessWork']); $process->write(json_encode($data_pop)); $pid = $process->start();
swoole_event_add(): 将一个socket加入到底层的reactor
事件监听中;在子进程中处理一些耗时的计算或者操作;
/** 获取管道的业务数据,进行相关的操作 */ public function sonProcessWork(\swoole_process $worker){ $GLOBALS['worker'] = $worker; swoole_event_add($worker->pipe, function($pipe) { /******start*你的业务逻辑 *******/ ..... /******end*你的业务逻辑 *******/ $worker->exit(0); }) }
wait(false)
回收结束运行的子进程
/** 根据信号处理紫禁城 */ private function sig_handler($signo) { Process::signal(SIGCHLD, function($sig) { //必须为false,非阻塞模式 while($ret = Process::wait(false)) { echo "PID={$ret['pid']}\n"; } }); }
到此,相信大家对“php_swoole对进程的基本操作”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!