当前位置: 首页 > 后端技术 > PHP

Swoft2.0.4发布,流程,TCP组件

时间:2023-03-29 16:40:44 PHP

什么是Swoft?Swoft是一个基于Swoole扩展的PHP微服务协程框架。Swoft和Go一样,内置了协程Web服务器和常用的协程客户端,并且常驻内存,不依赖于传统的PHP-FPM。有类似Go语言的协程运行方式,类似SpringCloud框架的灵活注解,强大的全局依赖注入容器,完善的服务治理,灵活强大的AOP,标准的PSR规范实现等。通过三年的积累和方向探索,Swoft将Swoft内置到PHP世界的SpringCloud中,是PHP高性能框架和微服务治理的最佳选择。流程组件包括以下三个功能:流程操作用户流程流程池用户流程Http/RPC/Websocket/TCP等服务有些业务场景需要后台运行的流程进行监控、上报或其他特殊操作。这时候可以在对应服务启动的时候,添加一个自定义的worker进程来实现。自定义用户进程随服务一起启动,随服务关闭一起退出。如果自定义用户进程被意外关闭,服务会重新启动一个新的自定义用户进程,以保证自定义用户进程一直存在。/***类MonitorProcess**@since2.0**@Bean()*/classMonitorProcessextendsUserProcess{/***@paramProcess$process**@throwsDbException*/publicfunctionrun(Process$process):void{$process->name('swoft-monitor');while(true){$connections=context()->getServer()->getSwooleServer()->connections;CLog::info('monitor='.json_encode($connections));//数据库$user=User::find(1)->toArray();CLog::info('user='.json_encode($user));//RedisRedis::set('test','ok');CLog::info('test='.Redis::get('test'));协程::睡眠(3);}}}进程池进程池一般用于需要一直运行的场景的程序,比如队列消费,数据计算等。在Swoft框架中,基于Swoole进程池模型进行了重新封装,方便开发者快速方便的使用进程池。配置return['processPool'=>['class'=>ProcessPool::class,'workerNum'=>3]];进程确定/***ClassWorker1Process**@since2.0**@Process()*/classWorker1Process实现ProcessInterface{/***@paramPool$pool*@paramint$workerId*/publicfunctionrun(Pool$pool,int$workerId):void{while(true){CLog::info('worker-'.$workerId);协程::睡眠(3);}}}命令$phpbin/swoftprocessGroup:processUsage:bin/swoftprocess:COMMAND[--opt...][arg...]GlobalOptions:--debugSettingtheapplicationruntimedebuglevel(0-4)--no-color为消息输出禁用颜色/ANSI-h,--help显示此帮助消息-V,--version显示应用程序版本信息命令:reloadNodescriptionmessagerestartNodescriptionmessagestartNodescriptionmessagestopNodescriptionmessageExsample:bin/swoftprocess:start启动进程池bin/swoftprocess:stop停止进程池查看指定命令,请使用:bin/swoftprocess:COMMAND-hTCCPCP组件基于原swooleserver,封装详细使用配置'tcpServer'=>['class'=>TcpServer::class,'port'=>18309,'debug'=>env('SWOFT_DEBUG',0),/*@seeTcpServer::$setting*/'setting'=>['log_file'=>alias('@runtime/swoole.log'),]],/**@see\Swoft\Tcp\Protocol*/'tcpServerProtocol'=>['type'=>\Swoft\Tcp\Packer\SimpleTokenPacker::TYPE,//'openEofCheck'=>true,//默认使用EOF检查//'openLengthCheck'=>true,],Controller/***ClassDemoController**@TcpController()*/classDemoController{/***@TcpMapping("list",root=true)*@paramResponse$response*/publicfunctionlist(Response$response):void{$response->setData('[list]允许命令:列表,回显,演示.echo');}}Command$phpbin/swofttcpDescription:TheresomecommandsformanagethetcpserverUsage:tcp:{command}[arguments][options]Commands:startStartthetcpserverstopStoptherunningserverrestartRestarttherunningserver选项:-h,--help显示命令组或指定命令动作的帮助更新内容增强(Enhancement):Swoft\Http\Message\Request添加getHeaderLines()(74a2a91)Aop添加getArgsMap()和getClassName()方法(c47e785)添加srun()函数,用于协程调度(3c4a6a4)以优化服务器事件(onStart/onWorkStart/onWorkStop/onShutdown),事件自带协程支持(a8d5a8d)。新增发布同步阻塞任务(ec938e5)新增Redis调用方式,用于使用相同的连接操作(92456987)兼容Swoole4.4.x修复(Fixed):修复迁移类名过长导致记录类名不完整(58314b8)修复实体查询后使用Setter更新字段值后,更新更新无效(caadf0e)修复stop后,删除pid文件结果返回错误,导致重启失败(2be450bf11)修复问题i18n默认语言设置不生效(b401a504e)修复ws服务器在多个worker连接时无法主动关闭其他workerWorker连接(271b6398)修复http服务器收到xml请求时无法正确匹配内容类型(2ff9a4e61)修复使用Database,json操作无效(92456987)修复限速器Redis加前缀无法使用问题(7b54d4c)更新(Update):更新ws服务器,可以配置disabledModules来禁用ws模块(fa31111d)扩展(Extra):官网添加案例展示,欢迎大家提交案例到官方案例库swoft-cloud/swoft-案例在GitHub上对文档的修改会自动更新到官网文档,无需手动刷新新建(New)进程管理(c61b8f7)自定义用户进程(c328d54)进程池(d2e6290)TCP服务器升级去掉bin/swoft中的Runtime::enanbleCoroutine()设置请确保swoole的swoole.use_shortname的值为OnResourceGitee:https://gitee.com/swoft/swoftGitHub:https://github.com/swoft-cloud/swoft官网:https://www.swoft.org文档:https://www.swoft.org/docs