Golang 快速入门:
文档:Golang 轻量级并发服务器框架 Zinx
视频:Zinx Golang 轻量级 TCP 服务器框架
本项目所有版本代码都在:https://gitee.com/szluyu99/my-zinx/tree/master/(不同分支对应不同版本)
本文章没有详细代码,只有疏理的思维导图,代码可以参考 Gitee 或文档。
Zinx 框架开发笔记
Zinx:轻量级的 TCP 服务器框架
- 基础的 Server
- 简单的连接封装和业务绑定
- 基础 Router 模块
- 全局配置
- 消息封装
- 多路由模式
- 读写协程分离
- 消息队列及多任务
- 连接管理
- 连接 属性配置
- 基于 Zinx 的应用案例
Zinx 架构:
参考:初识 Zinx 框架
Zinx - V0.1 构建最基础的 server
1. Zinx-V0.1 基础 Server
Zinx 的最基本的两个模块 ziface
和 znet
:
-
ziface
主要是存放一些 Zinx 框架的全部模块的抽象层接口类。
Zinx 框架的最基本的服务类接口 iserver
,定义在该模块中。
-
znet
模块是 Zinx 框架中网络相关功能的实现,所有网络相关模块定义在这里。
- 启动服务器:基本的服务器开发
- 创建一个 TCP 的 Addr
- 监听服务器地址,创建 Listener
- 阻塞等待连接,进行业务处理
- 停止服务器:做一些资源、状态、连接信息的回收操作
- 运行服务器:调用 Start() 方法,调用后做阻塞,以后可以做功能的拓展
V0.1 版本代码:这个版本的代码忘了上传了,可以看参考文档里作者放出来的。
Zinx - V0.2 连接封装与业务绑定
2. Zinx-V0.2 简单的连接封装与业务绑定
V0.2 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.2/(选择 V0.2
分支)
Zinx - V0.3 框架路由模块
参考文档:Zinx 框架基础路由模块
3.1 IRequest 消息请求抽象类
3.2 IRouter 路由配置抽象类
3.3 Zinx-V0.3 集成简单路由功能
3.5 使用 Zinx-V0.3 完成应用程序
V0.3 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.3/(选择 V0.3
分支)
Zinx - V0.4 全局配置
四、Zinx 的全局配置
这里使用 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 消息封装
五、Zinx 的消息封装
定义一个消息的结构 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 完成应用程序
V0.5 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.5/(选择 V0.5
分支)
Zinx - V0.6 多路由模式
参考:六、Zinx 的多路由模式
6.1 创建消息管理模块
6.2 Zinx - V0.6 代码实现
V0.6 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.6/(选择 V0.6
分支)
Zinx - V0.7 读写协程分离
参考:七、Zinx的读写分离模型
7.2 使用 Zinx-V0.7 完成应用程序
V0.7 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.7/(选择 V0.7
分支)
Zinx - V0.8 消息队列及多任务机制
参考:八、Zinx 的消息队列及多任务机制
设计架构:
消息队列及多任务:
- 8.1 创建消息队列
- 8.2 创建及启动 Worker 工作池
- 将之前的发送消息,全部改成:把消息发送给 消息队列 和 worker 工作池来处理 8.3 发送消息给消息队列
将消息队列集成到 Zinx 框架:8.4 Zinx-V0.8 代码实现
8.5 使用 Zinx-V0.8 完成应用程序
配置文件新增 WorkerPoolSize
为 10
{
"Name": "Zinx V0.8 demoServerApp",
"Host": "127.0.0.1",
"TcpPort": 8999,
"MaxConn": 3,
"WorkerPoolSize": 10
}
V0.8 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.8/(选择 V0.8
分支)
Zinx - V0.9 连接管理
九、Zinx 的连接管理
9.1 创建连接管理模块:ConnManager
9.2 连接管理模块集成到 Zinx 中
9.4 注册链接启动/停止自定义 Hook 方法功能
给 ZInx 框架提供:创造连接之后 / 销毁连接之前 所要处理的一些业务,提供给用户能够注册的 Hook 函数
9.5 使用 Zinx-V0.9 完成应用程序
V0.9 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V0.9/(选择 V0.9
分支)
Zinx - V1.0 连接属性配置
十、Zinx 的连接属性设置
10.1 给连接添加连接配置接口
10.2 连接属性方法实现
10.3 连接属性 Zinx-V0.10 单元测试
V1.0 版本的代码:https://gitee.com/szluyu99/my-zinx/tree/V1.0/(选择 V1.0
分支)