栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

【Go 框架开发】Zinx 框架开发笔记

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Go 框架开发】Zinx 框架开发笔记

Zinx 框架开发笔记
  • Zinx 框架开发笔记
    • Zinx - V0.1 构建最基础的 server
    • Zinx - V0.2 连接封装与业务绑定
    • Zinx - V0.3 框架路由模块
    • Zinx - V0.4 全局配置
    • Zinx - V0.5 消息封装
    • Zinx - V0.6 多路由模式
    • Zinx - V0.7 读写协程分离
    • Zinx - V0.8 消息队列及多任务机制
    • Zinx - V0.9 连接管理
    • Zinx - V1.0 连接属性配置

Golang 快速入门:

  • 【Golang 快速入门】基础语法 + 面向对象
  • 【Golang 快速入门】高级语法:反射 + 并发
  • 【Golang 快速入门】项目实战:即时通信系统
  • 【Golang 快速入门】Go Modules + 生态拓展
  • 【Go 框架开发】Zinx 框架开发笔记

文档: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 框架中网络相关功能的实现,所有网络相关模块定义在这里。

  • 启动服务器:基本的服务器开发
    1. 创建一个 TCP 的 Addr
    2. 监听服务器地址,创建 Listener
    3. 阻塞等待连接,进行业务处理
  • 停止服务器:做一些资源、状态、连接信息的回收操作
  • 运行服务器:调用 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 的消息队列及多任务机制

设计架构:

消息队列及多任务:

  1. 8.1 创建消息队列
  1. 8.2 创建及启动 Worker 工作池
  1. 将之前的发送消息,全部改成:把消息发送给 消息队列 和 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 分支)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号