千家信息网

什么是swoft2进程

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"什么是swoft2进程",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是swoft2进程"吧!基本功能介绍swoft2 自定义用户进程
千家信息网最后更新 2025年11月07日什么是swoft2进程

本篇内容主要讲解"什么是swoft2进程",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是swoft2进程"吧!

基本功能介绍

  1. swoft2 自定义用户进程来定期执行用户自定义任务

  2. swoft2 支持进程池解决多进程并发执行用户自定义任务

进程和线程的介绍 https://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

多进程程序设计能解决很多有意义的问题,程序的主进程运行核心任务,一些辅助进程解决一些例如消息队列的处理,后台定期执行的任务处理,文件监控,定期日志上报等相关功能.每个进程都有独立的上下文,进程之间互不干扰.

功能的相关配置选项

  1. 用户进程的配置一般需要在 bean.php 里注册,系统会自动加载用户配置的自定义进程

  2. 进程池的配置也需要在 bean.php 配置进程池配置项,但进程池不会自动加载,需要手动执行命令来启动用户进程

用户进程配置简单示例

修改 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秒 } }
  • 注意事项

  1. 自定义进程类需要打上 Bean 注解

  2. 用自定义进程类必须继承 Swoft\Process\UserProcess

  3. 用户自定义进程类的 run 方法是具体的任务执行代码

  4. 用户进程需要while循环来防止进程执行完毕后退出

  5. 休眠函数请使用 Coroutine::sleep(3) 参数根据项目实际情况配置,单位是秒.支持传小数,如果传入参数0.5,则代表每 500ms 执行一次

  6. 在run方法里不使用 while(true) 而使用 \Swoft\Timer::tick ,也是可以的,但tick更多的用于解决周期性任务,该函数需要维护更多的调用栈,并且触发 swoft 的内置事件,所以它更消耗性能,一般在执行频率要求不高的场景下使用,如果一些执行频率较高的任务推荐使用 while(true)

控制台打印

进程池代码预览

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); } }}
  • 注意事项

  1. 进程池进程类需要打上 Process 注解 且参数是 workerId 值为分配的进程池work进程的id数组.

  2. 进程池进程类需要实现 Swoft\Process\Contract\ProcessInterface 接口.

  3. 进程池 Process 注解的 workerId 不是越多越好,需要根据你的需要设置,设置的越多占用的内存越多.

  4. 每个 workerid 只允许分配一次,如果分配多个系统会抛出异常.

  5. workerid的取值范围是 0 到 bean.php 配置的 workerNum-1 本文的例子是 0-11

启动说明

前台启用进程

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

控制台打印

到此,相信大家对"什么是swoft2进程"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

进程 配置 用户 任务 分配 代码 函数 功能 参数 实际 方法 更多 注解 示例 越多 处理 服务 事项 内容 后台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 邮件合并不显示数据库中的0 苹果手机数据恢复软件开发 成都应用软件开发公司哪家强 软件开发职业分析与环境报告 建筑项目数据库技术 服务器对接网络技术 堆叠 广东省网络安全协会黄丽玲 网络技术对督促程序的作用 学校寒假网络安全总结 数据库密码采用什么加密 打印机服务器安全吗 郴州学计算机软件开发培训多少钱 致远协同办公数据库 服务器设备维保方案pdf 个人软件开发者大会 网络安全的手抄报的图片 删除数据库表中的数据语法 金融软件开发技术服务 北京海市经纬网络技术 杭州saas软件开发公司 基于混合式交互软件开发 苹果手机数据恢复软件开发 数据库操作时注意事项 计算机网络技术专业薪水 智能存储服务器测评 网络安全红蓝对抗演习 网络安全职责部门 职能 力控修改数据库参数后要重启DB 希望之村服务器连不上 山西精英网络技术咨询商家
0