Skip to content

Commit

Permalink
update to 2.5.0 (build 415)
Browse files Browse the repository at this point in the history
  • Loading branch information
crazywhalecc committed Jul 9, 2021
1 parent e57cc43 commit d67dfe4
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 11 deletions.
113 changes: 113 additions & 0 deletions docs/component/module/module-pack.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# 模块打包

从 2.5 版本起,炸毛框架的模块源码支持了打包和分发,开发者可以通过将自己的功能编写打包,并通过互联网进行分发,供其他人使用。此外,还提供了模块包热加载(不解包直接运行)和模块包解包功能。

## 构建模块包配置文件

炸毛框架的模块区分是根据 `src` 目录下的文件夹定义的,模块包的配置文件命名必须为 `zm.json`,此外,假设我们编写了一个最简单的模块,以脚手架生成的 Example 模块为例,文件夹结构如下:

```
src/
└── Module/
   ├── Example/
   │   ├── Hello.php
   │   └── zm.json
   └── Middleware/
   └── TimerMiddleware.php
```

我们在 Example 目录下创建一个 `zm.json` 的文件,编写配置,即代表 `src/Module/Example/` 文件夹及里面的用户模块源码为一个模块包,也就可以被框架识别并打包处理。

编写的配置文件结构如下:

```
{
"name": "my-first-module"
}
```

对!你没看错,只需要定义一个 `name` 字段,即可声明这是一个模块包!

### 配置文件参数

#### - description

- 类型:`string`

- 含义:模块的描述。

??? note "点我查看编写实例:"

```json
{
"name": "my-first-module",
"description": "这个是一个示例模块打包教程"
}
```

#### - version

- 类型:string。
- 含义:模块的版本。

版本处理方式和 Composer 基本一致,建议使用三段式,也就是 `大版本.小版本.补丁版本`。关于三段式版本的描述和规范,见 [到底三段式版本号是什么?](https://www.chrisyue.com/what-the-hell-are-semver-and-the-difference-between-composer-version-control-sign-tilde-and-caret.html)

??? note "点我查看编写实例:"
```json
{
"name": "my-first-module",
"description": "这个是一个示例模块打包教程"
}
```

#### - depends

- 类型:map of string(例如 `{"foo":"bar","baz":"zoo"}`)。
- 含义:模块的依赖关系和版本依赖声明。

此处用作模块的依赖检测,假设模块 `foo` 依赖模块 `bar` 的 1.x 版本但是不兼容 `bar` 的 2.x 版本,可以像 Composer 的 `require` 一样编写版本依赖:`^1.0`。也可以使用 `~``>=``*` 这些与 Composer 包管理相同逻辑的版本依赖关系,详见 [Composer - 包版本](https://docs.phpcomposer.com/01-basic-usage.html#Package-Versions)

??? note "点我查看编写实例:"
```json
{
"name": "foo",
"description": "这个是一个示例模块打包教程",
"depends": {
"bar": "^1.0",
"bsr": "*"
}
}
```

#### - light-cache-store

- 类型:array of string(例如 `["foo","bar"]`)。
- 含义:打包模块时要储存的持久化 LightCache 键名列表。

这里需要配合 LightCache 使用,如果你有一些需要全局缓存的数据,例如动态配置项,比如群服务状态列表,可以先使用 LightCache 存储并使用 `addPersistence()` 持久化,此后在使用模块打包时编写此配置项。

我们假设在项目模块中使用到了 `group-status` 这一个 LightCache,那么只需要写 `light-cache-store` 配置项,在模块打包时就会将持久化的数据也打包到 phar 模块包内。

??? note "点我查看编写实例:"
```json
{
"name": "foo",
"description": "这个是一个示例模块打包教程",
"light-cache-store": [
"group-status"
]
}
```



| 字段名 | 类型 | 含义 |
| ---------------------- | ---------------------------------- | ---------------------------------------- |
| description | string | 模块的描述 |
| version | string | 模块的版本(建议使用 x.y.z 三段式) |
| depends | array of string(例如`{"a":"b"}`| 模块依赖关系声明 |
| light-cache-store | string[] | 打包模块时要储存的持久化 LightCache 键名 |
| global-config-override | string \| false | 是否需要手动编辑全局配置(`global.php`|
| | | |

21 changes: 14 additions & 7 deletions docs/guide/quickstart-robot.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@ OneBot 机器人部分的选择详情见 [OneBot 实例](/guide/OneBot实例/)
delay: 3 # 首次重连延迟, 单位秒
interval: 3 # 重连间隔
max-times: 0 # 最大重连次数, 0为无限制

# 是否使用服务器下发的新地址进行重连
# 注意, 此设置可能导致在海外服务器上连接情况更差
use-sso-address: true

heartbeat:
# 心跳频率, 单位秒
# -1 为关闭心跳
interval: 5

message:
# 上报数据类型
# 可选: string,array
Expand All @@ -72,13 +72,13 @@ OneBot 机器人部分的选择详情见 [OneBot 实例](/guide/OneBot实例/)
remove-reply-at: false
# 为Reply附加更多信息
extra-reply-data: false

output:
# 日志等级 trace,debug,info,warn,error
log-level: warn
# 是否启用 DEBUG
debug: false # 开启调试模式

# 默认中间件锚点
default-middlewares: &default
# 访问密钥, 强烈推荐在公网的服务器设置
Expand All @@ -94,14 +94,14 @@ OneBot 机器人部分的选择详情见 [OneBot 实例](/guide/OneBot实例/)
enabled: false # 是否启用限速
frequency: 1 # 令牌回复频率, 单位秒
bucket: 1 # 令牌桶大小

database: # 数据库相关设置
leveldb:
# 是否启用内置leveldb数据库
# 启用将会增加10-20MB的内存占用和一定的磁盘空间
# 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
enable: true

# 连接服务列表
servers:
# 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
Expand Down Expand Up @@ -331,3 +331,10 @@ public function repeat() {

> 如果你只回复 `echo` 的话,它会先和你进入一个会话状态,并问你 `请输入你要回复的内容`,这时你再次说一些内容例如 `哦豁`,会回复你 `哦豁`。效果和直接输入 `echo 哦豁` 是一致的,这是炸毛框架内的一个封装好的命令参数对话询问功能。有关参数询问功能,请看后面的进阶模块。


## 使用机器人 API 和事件

如果你想不只是回复消息,还要做其他复杂的动作(Action),使用 OneBot Action(又名 OneBot API)进行发送即可,见 [机器人 API](/component/bot/robot-api)

如果想处理其他类型的事件,比如 QQ 群通知事件等,见 [机器人注解事件](/event/robot-annotations/)
5 changes: 4 additions & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ markdown_extensions:
- pymdownx.superfences
- pymdownx.inlinehilite
- pymdownx.snippets
- pymdownx.details
- abbr
- pymdownx.highlight:
linenums: true
Expand Down Expand Up @@ -93,13 +94,15 @@ nav:
- HTTP 服务器工具类:
- HTTP 和 WebSocket 客户端: component/zmrequest.md
- HTTP 路由管理: component/route-manager.md
- 模块/插件管理:
- 模块打包: component/module/module-pack.md
- 协程池: component/coroutine-pool.md
- 单例类: component/singleton-trait.md
- ZMUtil 杂项: component/zmutil.md
- 全局方法: component/global-functions.md
- Console 终端: component/console.md
- TaskWorker 管理: component/task-worker.md
- 远程终端: component/remote-terminal.md
- Terminal 终端: component/remote-terminal.md
- 进阶开发:
- 进阶开发: advanced/index.md
- 框架剖析: advanced/framework-structure.md
Expand Down
2 changes: 1 addition & 1 deletion src/Module/Example/Hello.php
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,6 @@ public function onRequest() {
*/
public function closeUnknownConn() {
Console::info("Unknown connection , I will close it.");
server()->close(ctx()->getConnection()->getFd());
server()->disconnect(ctx()->getConnection()->getFd());
}
}
4 changes: 2 additions & 2 deletions src/ZM/ConsoleApplication.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ class ConsoleApplication extends Application
{
private static $obj = null;

const VERSION_ID = 414;
const VERSION = "2.5.0-b4";
const VERSION_ID = 415;
const VERSION = "2.5.0";

/**
* @throws InitException
Expand Down

0 comments on commit d67dfe4

Please sign in to comment.