wonder-game / es-utility
utility for easyswoole
Installs: 1 226
Dependents: 0
Suggesters: 0
Security: 0
Stars: 10
Watchers: 2
Forks: 5
Open Issues: 1
Requires
- php: >=7.4
- ext-iconv: *
- ext-json: *
- ext-mbstring: *
- ext-xlswriter: *
- alibabacloud/dm-20151123: ^1.1
- alibabacloud/dysmsapi-20170525: ^2.0
- czdb/searcher: ^1.0
- easyswoole/config: >=1.0
- easyswoole/easyswoole: 3.4.x
- easyswoole/file-watcher: ^1.0
- easyswoole/http-client: ^1.5
- easyswoole/i18n: ^1.0
- easyswoole/jwt: >=1.1
- easyswoole/log: >=1.0
- easyswoole/mysqli: >=2.2
- easyswoole/orm: >=1.4
- easyswoole/oss: ^1.1
- easyswoole/policy: ^1.0
- easyswoole/redis-pool: >=2.1
- easyswoole/swoole-ide-helper: ^1.3
- easyswoole/task: >=1.1
- easyswoole/tracker: ^1.1
- easyswoole/wechat: ^2.0
- easyswoole/words-match: ^1.1
- tencentcloud/captcha: ^3.0
- tencentcloud/ses: ^3.0
- tencentcloud/sms: ^3.0
Requires (Dev)
- easyswoole/phpunit: ^1.1
- dev-master
- v2.13.x-dev
- v2.13.1
- v2.13.0
- v2.12.62
- v2.12.61
- v2.12.60
- v2.12.59
- v2.12.58
- v2.12.57
- v2.12.56
- v2.12.55
- v2.12.54
- v2.12.53
- v2.12.52
- v2.12.51
- v2.12.50
- v2.12.49
- v2.12.48
- v2.12.47
- v2.12.46
- v2.12.45
- v2.12.44
- v2.12.43
- v2.12.42
- v2.12.41
- v2.12.40
- v2.12.39
- v2.12.38
- v2.12.37
- v2.12.36
- v2.12.35
- v2.12.34
- v2.12.33
- v2.12.32
- v2.12.31
- v2.12.30
- v2.12.29
- v2.12.28
- v2.12.27
- v2.12.26
- v2.12.25
- v2.12.24
- v2.12.23
- v2.12.22
- v2.12.21
- v2.12.20
- v2.12.19
- v2.12.18
- v2.12.17
- v2.12.16
- v2.12.15
- v2.12.14
- v2.12.13
- v2.12.12
- v2.12.11
- v2.12.10
- v2.12.9
- v2.12.8
- v2.12.7
- v2.12.6
- v2.12.5
- v2.12.4
- v2.12.3
- v2.12.2
- v2.12.1
- v2.12.0
- v2.11.13
- v2.11.12
- v2.11.11
- v2.11.10
- v2.11.9
- v2.11.8
- v2.11.7
- v2.11.6
- v2.11.5
- v2.11.4
- v2.11.3
- v2.11.2
- v2.11.1
- v2.11.0
- v2.10.x-dev
- v2.10.10
- v2.10.9
- v2.10.8
- v2.10.7
- v2.10.6
- v2.10.5
- v2.10.4
- v2.10.3
- v2.10.2
- v2.10.1
- v2.9.10
- v2.9.9
- v2.9.8
- v2.9.7
- v2.9.6
- v2.9.5
- v2.9.4
- v2.9.3
- v2.9.2
- v2.9.1
- v2.9.0
- 2.8.12
- 2.8.11
- 2.8.10
- 2.8.9
- 2.8.8
- 2.8.7
- 2.8.6
- 2.8.5
- v2.8.4
- v2.8.3
- v2.8.2
- v2.8.1
- v2.8.0
- 2.7.8
- 2.7.7
- 2.7.6
- 2.7.5
- 2.7.4
- 2.7.3
- 2.7.2
- 2.7.1
- 2.7.0
- 2.6.3
- 2.6.2
- 2.6.1
- 2.6.0
- 2.5.19
- v2.5.18
- v2.5.17
- v2.5.16
- v2.5.15
- v2.5.14
- v2.5.13
- v2.5.12
- v2.5.11
- v2.5.10
- v2.5.9
- v2.5.8
- v2.5.7
- v2.5.6
- v2.5.5
- v2.5.4
- v2.5.3
- v2.5.2
- v2.5.1
- v2.5.0
- v2.3.6
- v2.3.5
- v2.3.4
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.x-dev
- v2.2.27
- v2.2.26
- v2.2.25
- v2.2.24
- v2.2.23
- v2.2.22
- v2.2.21
- v2.2.20
- v2.2.19
- v2.2.18
- v2.2.17
- v2.2.16
- v2.2.15
- v2.2.14
- v2.2.13
- v2.2.12
- v2.2.11
- v2.2.10
- v2.2.9
- v2.2.8
- v2.2.7
- v2.2.6
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.x-dev
- v2.1.17
- v2.1.16
- v2.1.15
- v2.1.14
- v2.1.13
- v2.1.12
- v2.1.11
- v2.1.10
- v2.1.9
- v2.1.8
- v2.1.7
- v2.1.6
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.22
- v2.0.21
- v2.0.20
- v2.0.19
- v2.0.18
- v2.0.17
- v2.0.16
- v2.0.15
- v2.0.14
- v2.0.13
- v2.0.12
- v2.0.11
- v2.0.10
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.0.39
- v1.0.38
- v1.0.37
- v1.0.36
- v1.0.35
- v1.0.34
- v1.0.33
- v1.0.32
- v1.0.31
- v1.0.30
- v1.0.29
- v1.0.28
- v1.0.27
- v1.0.26
- v1.0.25
- v1.0.24
- v1.0.23
- v1.0.22
- v1.0.21
- v1.0.20
- v1.0.19
- v1.0.18
- v1.0.17
- v1.0.16
- v1.0.15
- v1.0.14
- v1.0.13
- v1.0.12
- v1.0.11
- v1.0.10
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v1.0.0-beta.1
- dev-develop
- dev-lamson
This package is auto-updated.
Last update: 2025-03-21 03:18:40 UTC
README
基于Easyswoole封装的一些Trait和Class,放到Composer仓库以实现多项目共用一套代码
开始
composer require wonder-game/es-utility
需要掌握的基础知识:
目录结构及常用介绍
src 理解为EasySwoole的App目录
├── Common 主要放一些非EasySwoole的东
| ├── Classes 自定义类
│ │ ├── Crontab 实现定时任务的类(后面会移动至Crontab目录)
│ │ ├── CtxRequest 协程单例类,解决一些痛点,如Model内无法获取Http Request、WebSocket Caller实例等,作用与EasySwoole\Component\Context\ContextManager类似
│ │ ├── DateUtils 时间日期时区等处理
│ │ ├── ExceptionTrigger 自定义异常处理器,将异常上报至redis或http
│ │ ├── FdManager WebSocket连接符管理,共享内存(Swoole\Table)实现
│ │ ├── LamJwt jwt
│ │ ├── LamOpenssl RSA数据加密和解密
│ │ ├── LamUnit 辅助工具类
│ │ ├── Mysqli 对MysqlClient的二次封装
│ │ ├── ShardTable 定时建分区、续分区
│ │ ├── Tree 数行结构处理
│ │ └── XlsWriter 数据导入和导出
│ ├── Exception 各种自定义异常
│ ├── Http Http相关的配置
│ │ └── Code Http响应状态码,项目的Code请`继承`它
│ ├── Language I18N国际化目录
│ │ ├── Dictionary 国际化字典,项目请`继承`它
│ │ └── Languages I18n助手类,主要用来注册、设置
│ │
│ ├── Logs 自定义日志处理器
│ └── OrmCache 模型缓存组件,已实现 String、Hash、Set、SplArray
│
├── HttpController
│ ├── Admin
│ │ ├── BaseTrait 继承BaseController
│ │ ├── AuthTrait 继承BaseTrait引用类,是其他控制器的父类,主要实现一些CURD等基础操作,子类可写最少代码实现相关功能
│ │ └── ... 其他业务控制器
│ ├── Api
│ └── BaseController 所有控制器的基类
├── HttpTracker 链路追踪
│ ├── Index 继承自PointContext,目的是为了默认开启autoSave及设置saveHandler,实例化时用它替代PointContext
│ └── SaveHandler 实现SaveHandlerInterface接口
├── Model
│ ├── BaseModelTrait 所有Model的基类
│ └── ... 其他业务模型
├── Task 异步任务
│ ├── Crontab 通用的异步任务模板
│ └── ... 异步任务类
├── WebSocket 同 HttpController
├── ... 其他业务
├── EventInitialize 对EasySwooleEvent::initialize事件的一些封装
├── EventMainServerCreate 对EasySwooleEvent::mainServerCreate事件的一些封装
└── function.php 常用函数,项目可预定义对应函数以实现不同逻辑
Controller
<?php use WonderGame\EsUtility\HttpController\Admin\AdminTrait; class MyAdminController { use AdminTrait; // here are some methods from AdminTrait .... }
Model
<?php use WonderGame\EsUtility\Model\AdminModelTrait; class MyAdminModel { use AdminModelTrait; // here are some methods from AdminModelTrait .... }
答疑解惑
function.php 为何不写在此项目的composer.json
function.php应该由项目的composer.json去定义引入的顺序
位置一定得是在项目的函数引入之后,否则无法预定义函数,而放在此项目的composer.json会被优先加载
为何多数文件选择trait而不使用继承
trait和继承各有优劣,选择trait目的是为了EasySwoole推荐的继承关系不被破坏
trait有哪些坑
1. 不允许重写属性,所以基本都定义了一个setTraitProtected方法去修改trait属性
2. 不允许重载方法,当某些项目可能比方法多一个小逻辑时,需要及时调整代码的封装,否则需要整个复制多一份,日积月累,反而可能更难维护
3. 由于 2 的限制,现将普通控制器方法的public方法名默认添加一个固定前缀,通过基础控制器 /src/HttpController/BaseControllerTrait.php 的 actionNotFound 方法来实现更加灵活的调用方式
开发备忘
1. OrmCache/Strings的bloom功能使用时需注意:如果不同的系统(例如log, sdk)刚好用的是同一个redis实例,而且又刚好有同名的表(例如game,package),请务必保证两表内容是同步的!!像pay.order_GAMEID分表和log.order_GAMEID分表,这个得注意了,因为它俩就是主键和内容都不同的,不能启用这个功能!!!
TODO
- 创建定时任务Crontab和消费任务Consumer,src/Common/Classes/Crontab移动至src/Crontab目录
- 自定义Log处理器改为onLog + Event方式
- 重写Tree、ShardTable类
- WebSocket相关类,事件、解析、Caller、连接符管理等
- Crontab支持database、file、http等方式获取
- es-orm-cache 组件封装,替换原有的cacheinfo系列方法
- WebSocket实现导出全部,永不超时,进度实时可见,随时取消
- 定义模型Class映射