Zink 框架开发笔记
本项目所有版本代码都在:https://gitee.com/szluyu99/my-zinx/tree/master/(不同分支对应不同版本)
Zinx 框架开发笔记
Zinx:轻量级的 TCP 服务器框架
- 基础的 Server
- 简单的连接封装和业务绑定
- 基础 Router 模块
- 全局配置
- 消息封装
- 多路由模式
- 读写协程分离
- 消息队列及多任务
- 连接管理
- 连接 属性配置
- 基于 Zinx 的应用案例
Zinx 架构:
初识 Zinx 框架
Zinx - V0.1 构建最基础的 server
Zinx 的最基本的两个模块 ziface
和 znet
:
-
ziface
主要是存放一些 Zinx 框架的全部模块的抽象层接口类。Zinx 框架的最基本的服务类接口
iserver
,定义在该模块中。 -
znet
模块是 Zinx 框架中网络相关功能的实现,所有网络相关模块定义在这里。
- 启动服务器:基本的服务器开发
- 创建一个 TCP 的 Addr
- 监听服务器地址,创建 Listener
- 阻塞等待连接,进行业务处理
- 停止服务器:做一些资源、状态、连接信息的回收操作
- 运行服务器:调用 Start() 方法,调用后做阻塞,以后可以做功能的拓展
V0.1 版本代码:这个版本的代码忘了上传了,可以看参考文档里作者放出来的。
Zinx - V0.2 连接封装与业务绑定
V0.2 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.2/(选择 V0.2
分支)
Zinx - V0.3 框架路由模块
IRequest 消息请求抽象类:
IRouter 路由配置抽象类:
集成简单路由功能:
使用 Zinx-V0.3 开发应用程序
V0.3 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.3/(选择 V0.3
分支)
Zinx - V0.4 全局配置
这里使用 JSON 作为配置文件,zinx.json
中的配置信息:
{
"Name":"demo server",
"Host":"127.0.0.1",
"TcpPort":7777,
"MaxConn":3
}
V0.4 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.4/(选择 V0.4
分支)
Zinx - V0.5 消息封装
定义一个消息的结构 Message:5.1 创建消息封装类型
使用 TLV (Type-Len-Value) 封包格式解决 TCP 粘包问题:5.2 消息的封包和拆包
由于 Zinx 也是 TCP 流的形式传播数据,难免会出现消息 1 和消息 2 一同发送,那么 Zinx 就需要有能力区分两个消息的边界,所以 Zinx 此时应该提供一个统一的拆包和封包的方法。
- 封包:在发包之前打包成如上图这种格式的有 head 和 body 的两部分的包
- 拆包:在收到数据的时候分两次进行读取,先读取固定长度的 head 部分,得到后续 Data 的长度,再根据 DataLen 读取之后的 body。
测试拆包封包功能:https://gitee.com/szluyu99/my-zinx/blob/V0.5/znet/datapack_test.go
将封包、拆包功能集成到 Zin 中:5.3 Zinx - V0.5 代码实现
使用 Zinx V0.5 开发应用:5.4 使用 Zinx - V0.5 完成应用程序
Zinx - V0.6 多路由模式
6.1 创建消息管理模块
6.2 Zinx - V0.6代码实现