标签:可扩展 timer err 小数 异常 自动加载 websocket extern graph
swoft2 自定义用户进程来定期执行用户自定义任务
swoft2 支持进程池解决多进程并发执行用户自定义任务
多进程程序设计能解决很多有意义的问题,程序的主进程运行核心任务,一些辅助进程解决一些例如消息队列的处理,后台定期执行的任务处理,文件监控,定期日志上报等相关功能.每个进程都有独立的上下文,进程之间互不干扰.
修改 bean.php
‘httpServer‘ => [
‘class‘ => HttpServer::class,
‘port‘ => 18306,
‘listener‘ => [
‘rpc‘ => bean(‘rpcServer‘)
],
‘process‘ => [
‘crontab‘ => bean(CrontabProcess::class)
‘log‘ => bean(\App\Process\LogProcess::class)
],
],
上面的配置是 WEB服务器 的应用配置 如果是 WebSocket服务器 写在wsServer配置项里,定义 process 属性就好.
注意process的值是一维数组,其中key你可以自己定义,只要合法且不重复即可,值则为你定义的进程类,请用工厂函数 bean 加载.
修改 bean.php
‘processPool‘ => [
‘class‘ => \Swoft\Process\ProcessPool::class,
‘workerNum‘ => 12
]
上面的配置定了进程池,且分配了12个可用工作进程,实际生产中根据你的项目需求自行修改配置项.
进程 workerid 的初始值是0,所以这里的 workerid 有效访问是0-11,请注意
namespace App\Process;
use Swoft\Bean\Annotation\Mapping\Bean;
use Swoft\Log\Helper\CLog;
use Swoole\Coroutine;
use Throwable;
use Swoft\Process\Process;
use Swoft\Process\UserProcess;
/**
* Class LogProcess
*
* @since 2.0
*
* @Bean()
*/
class LogProcess extends UserProcess
{
/**
* @param Process $process
*
* @throws Throwable
*/
public function run(Process $process): void
{
$process->name(‘swoft-monitor‘); //设置用户进程名
while (true) {
CLog::info(‘用户进程,每隔3秒输出一次‘);//需要处理的工作
Coroutine::sleep(3);//休眠3秒
}
}
}
进程池代码预览
namespace App\Process;
use Swoft\Log\Helper\CLog;
use Swoft\Process\Annotation\Mapping\Process;
use Swoft\Process\Contract\ProcessInterface;
use Swoole\Coroutine;
use Swoole\Process\Pool;
use Throwable;
/**
* Class Worker2Process
*
* @since 2.0
*
* @Process(workerId={0,1})
*/
class Worker2Process implements ProcessInterface
{
/**
* @param Pool $pool
* @param int $workerId
*
* @throws Throwable
*/
public function run(Pool $pool, int $workerId): void
{
while (true) {
CLog::info(‘worker-‘ . $workerId.‘ context=‘.context()->getWorkerId());
Coroutine::sleep(3);
}
}
}
注意事项
前台启用进程
php bin/swoft process:start
后台启动进程
php bin/swoft process:start -d
重启所有 worker 进程
php bin/swoft process:reload
重新启动
php bin/swoft process:restart
停止服务
php bin/swoft process:stop
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。
标签:可扩展 timer err 小数 异常 自动加载 websocket extern graph
原文地址:https://www.cnblogs.com/a609251438/p/12178344.html