?Light-php是一个基于swoole的高性能php框架。其轻巧的封装和易用性使其在中小型高性能项目中表现出色。文档目录环境要求安装教程配置文件路由中间件ControllerHook任务任务WebSocket数据库压力测试环境要求依赖说明PHP>=7.2推荐7.2Swoole>=4.2.9PHP5从2.0.12开始不再支持推荐4.2.9+大多数Linux系统可以推荐centos安装教程1-1。通过Composer(packagist)安装。这样安装的版本可能不是最新的。如果出现此问题,请使用1-2安装。作曲家创建项目woann/light-php-vvv1-2。通过Git安装。gitclonehttps://github.com/woann/Light-php.git2.将.env.example文件重命名为.env,并配置3.在项目根目录下执行phpbin\lightstart启动服务4.浏览器访问http://127.0.0.1:9521可以看到helloworld的输出。至此,框架安装完毕。配置文件1、Light-php的配置文件在/config目录下,框架集成了全局环境配置文件/.env,一般的配置都在.env文件中配置。2./config/app.php,框架的主配置文件,主要用于配置swoole扩展相关的参数。3./config/databases.php,数据库配置文件,配置数据库连接相关的参数。4./config/hook.php,配置hooks(hooks主要用来分离业务逻辑和通知服务)。5./config/redis.php,redis配置文件,配置redis连接相关参数。6./config/route.php,路由配置文件。7、以上配置文件具体参数的含义在代码中都注释了,这里不再多介绍路由控制器的简写,实际的控制器文件要追加在Controller之后)return['m'=>'index',//默认模块'c'=>'index',//默认控制器'a'=>'init',//默认操作'ext'=>'.html',//伪静态.html'http'=>[//httprouting//uri-----请求方法----模块/controller/method----[中间件]'/'=>['GET','Index/Index/index','Test'],'test/'=>['GET','Index/Index/ws']],'websocket'=>[//websocketrouting//uri----module/controller/method'ws'=>'Index/WebSocket/index',]];middlewaremiddleware文件要在/app/Middleware目录下创建,类名必须与文件名相同,并实现Lib\Middleware接口,中间件处理方法名必须为handle,最终返回结果必须如果过滤后通过则为真。示例:json(["code"=>200,"msg"=>"success"]);}//调用模板publicfunctionindex2(){$a="test";//输出/app/resources/views目录下的index.blade.php模板,并携带参数$a。支持的。拼接模板路径(同laravel中的模板引擎部分)return$this->view("index",["a"=>$a]);//也可以直接调用视图函数returnview("admin.index",["a"=>$a]);}}2。获取参数//get获取参数$this->request->get();//获取所有get参数:array$this->request->get("name");//传递参数string获取key为name的参数:string$this->request->get(["name","age"]);//传递参数组,获取key为name和age的参数:array//获取post参数$this->request->post();//获取所有get参数:array$this->request->post("name");//传递参数string获取key为name的参数:string$this->request->post(["name“,“年龄”]);//传递参数组获取key为name和age的参数:array//获取上传的文件$this->request->getFiles();//获取全部$this->request->getFile("image");//获取指定文件//文件上传//--------file----[路径](基于/resources/uploads/)---[新文件名](默认为随机生成)uploadFile($file,"banner","test.png");//上传文件方法开发者也可以在没有该方法的情况下编写上传操作钩子1.创建一个钩子。钩子文件应该在/app/Hook目录中创建。类名必须与文件名一致,必须继承Lib\BaseHook类。示例:write('INFO',$name,"startedsuccessfully","{$ip}:{$port}","at",date('Y-m-dH:i:s'));}publicfunctionopen($server,$fd){//这里可以执行websocket链接成功后绑定用户id和fd的操作}publicfunctionclose($server,$fd){//解绑用户的操作websocket关闭链接后的id和fd可以在这里进行}}2.在hook配置文件/app中注册hookin/config/hook.php[[\app\Hook\TestHook::class,'start'],],//Server::onOpen'open'=>[[\app\Hook\TestHook::class,'open'],],//Server::onClose'close'=>[[\app\Hook\TestHook::class,'close'],],];3.使用hooks//--获取hook服务实例--监听方式--hook名称---参数(...)------Hook::getInstance()->listen("start",$this->name,$this->config['ip'],$this->config['port']);Task任务1、创建一个Task类,Task文件要创建在/app/Task目录下,类名要和文件名一致,例如:server->connectionsas$client_fd){if($fd!=$client_fd&&$this->server->exist($client_fd)){//循环输出消息给客户端,不包括发送者fd$this->server->push($client_fd,$data);$fds[]=$client_fd;}}return"Sentto[".join(",",$fds)."]发送通知内容:".$data;}}2.controller中的deliverytask//--------Gettaskexample----assignmentserver---------------delivertask---task类------------方法------------参数\Lib\Task::getInstance()->setServer($this->server)->delivery(\app\Task\Notice::class,'ToAll',[1,"123"]);WebSocket1。打开websocketserver,configure.env文件SERVER_TYPE=websocket,这个配置环境可以同时监听http2。定义路由,参考文档路由部分,在路由配置文件/config/route.php下定义路由,websocketindex3.控制器示例>fd的唯一标识符client//$this->>serverwebsocket服务器对象(该对象提供的功能可参考swoole文档)//$data="哈哈哈,我是消息";$data2="这是任务task发送的群发消息";$this->server->push($this->fd,$data);//交付异步任务$this->task->delivery(\app\Task\Notice::class,'ToAll',[$this->fd,$data2]);}}4.跳过前端(view目录下有个ws.blade.php文件,可以用来测试websocket)...数据库数据库使用laravel框架的Illuminate\Database,熟悉laravel的小伙伴们可以快速上手。1.Querybuilder,参考文档where('id',1)->first();}}2.Model,参考文档namespaceapp\Models;useIlluminate\Database\Eloquent\Model;classUserextendsModel{protected$table='user';}压测调用框架中的json输出方法,输出如下:{"word":"helloworld"}压力测试中有一条查询语句publicfunctionindex(){$res=DB::table('user')->where('id',“=”,“1”)->第一个();返回$this->json($res);}
