• 欢迎来到本博客,希望可以y一起学习与分享

easyswoole

PHP benz 1周前 (06-11) 6次浏览 0个评论 扫描二维码
文章目录[隐藏]

入门

由于es3.x版本是全协程版本,无法直接使用think-orm,laravel-orm等单例数据库orm,所以EasySwoole提供了mysqli组件用于数据库操作。
easyswoole的文档在这里:框架安装

手动安装

启动easyswoole

新建控制器

访问
http://IP:9501/category/index

响应数据

html

添加模块
比如,添加api模块

访问路径:http://IP:9501/api/category/index

获取参数

easyswoole的钩子函数

项目\vendor\easyswoole\http\src\AbstractInterface\Controller.php有一个__hook的方法,里面是easyswoole的一些钩子函数:

在控制器中的使用:

数据库操作

EasySwoole提供了mysqli的组件 该组件是由mysqli-db更改为swoole的异步mysql扩展封装的数据库操作类

说明
由于es3.x版本是全协程版本,无法直接使用think-orm,laravel-orm等单例数据库orm,所以EasySwoole提供了mysqli组件用于数据库操作

http://www.easyswoole.com/cn/Components/Mysqli/install.html

 

Mysql-Pool 数据库链接池

https://www.easyswoole.com/Cn/Components/mysqlPool.html
EasySwoole\MysqliPool\Connection 实际上是Mysqli的子类,具体可以看 mysqli

实操

从easyswoole的demo参考而来。(https://github.com/xuanyanwow/easyswoole_admin)
因为easyswoole没有model文件夹,所以在App下新建Model文件夹;
在Model文件夹中新建一个Model基类:BaseModel.php。主要是统一获取easyswoole mysql实例。

然后一个表建一个同名文件夹,里面有两个类,一个Bean类,继承EasySwoole\Spl\SplBean\SplBean,记录表字段以及它们的get和set方法,为了解耦;一个Model类,继承BaseModel类,数据库的操作业务操作。

控制器使用:

性能测试

AB工具安装
yum -y install httpd-tools
查看AB安装在哪里
which ab
使用
ab -n 1000 -c 100 https://www.baidu.com/
-n:一共请求多少
-c:多少客户完成请求(并发)

消息队列

为什么需要消息队列?
可以异步化,代码可以解耦,提高效率。
模型:生产者与消费者
框架:Kafka(业界用的多)/rabbitmq/redis 每一个都可以做消息队列

https://www.easyswoole.com/Cn/Other/process.html

yafconf高性能配置管理

编译安装:https://github.com/laruence/yaconf

php.ini配置yafconf:

在指定好的文件夹内编写配置文件,配置文件后缀必须是ini:
redis.ini

配置还可以继承,不如bar.ini:

控制器使用:
Yaconf::get(配置文件名),比如:Yaconf::get("redis")就会以数组形式返回redis.ini的全部配置,也可以只取得一个配置值:Yaconf::get("redis.port")

文件上传

Easyswoole 在核心中提供了文件处理的系统组件,文件处理的主要代码实现文件为Core\Http\Message\UploadFile.php;

而文件处理的核心关键点在于onRequest事件进行全局拦截,通过请求获文件Stream。 Stream 在Core\Component\IO\Stream.php

一,获取基本实例

举例上传文件

在控制器中获取获取上传文件的3种方式

注意:单文件上传与多文件上传获取数据时的区别与遍历

二,基本实例的操作(uploadFile的使用)

依照上面的例子:

基于以上可以自己构建或扩展更加丰富的相关文件处理。

简单上传实例

目标:
根据键值来上传文件的类型,比如:上传的文件是视频,那么键值就是video;上传的文件是图片,那么键值就是image;
代码的编写:
新建一个Base.php的上传基类,实现上传的核心业务流程;
根据上传的文件类型新建一个类型类,专门处理这一类的文件,比如:视频的就建一个Video.php的类,这个类必须继承Base基类;
控制器使用的时候,只需要实例化对应的类型的类就可以了;

基类 Base.php

工具类 Utils

上传类型类 Video.php

控制器 使用

Swoole 文件上传注意

上传报错:Content-Length is too big, MaxSize=[2096670],这是因为POST默认最大上传为2M。

需要设置swoole的参数:PACKAGE_MAX_LENGTH
但是问题来了,看官方说明:

这就尴尬了。

总之,经过测试后,不推荐用swoole做上传接口。要么提交到某个php地址去,要么配合前端使用文件分块上传。

API静态化与定时

什么是API静态化?
就是把一些静态数据从数据库查出来,以json数据格式缓存到高速的缓存器中,以后同样的请求直接访问缓存数据,从而减少数据库的查询,提高效率。
可以把数据缓存到:file文件、swoole table、Redis等
如何产生API静态数据
API静态数据的产生有两个渠道:
一是客户端第一次访问产生;二是服务器定时生成。这两个渠道是同时存在的。

crontab定时(分钟级)

easyswoole提供crontab类:vendor/easyswoole/easyswoole/src/Crontab/Crontab.php
官方说明:https://www.easyswoole.com/Cn/BaseUsage/crontab.html
示例代码(EasySwoole v3.0)
EasySwooleEvent.php中 use EasySwoole\EasySwoole\Crontab\Crontab;

定时任务:TaskOne.php

cron通用表达式规则如下:

cron特殊表达式有以下几个:

swoole定时(毫秒级)

官方使用说明:https://www.easyswoole.com/Cn/BaseUsage/timer.html

注意:定时器不能在服务启动之前使用。在服务启动以后,添加的定时器仅仅在当前进程中有效。在workerStart事件中添加定时器时,请注意判断需要添加定时器的workerId,否在该定时器在每个进程中均会被执行

Redis缓存

官方教程:https://www.easyswoole.com/Cn/Components/redisPool.html

swoole table缓存

官方教程:https://www.easyswoole.com/Cn/Components/fastCache.html


文章 easyswoole 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!