0
点赞
收藏
分享

微信扫一扫

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

月孛星君 2022-03-11 阅读 129

Zink 框架开发笔记

本项目所有版本代码都在:https://gitee.com/szluyu99/my-zinx/tree/master/(不同分支对应不同版本)

Zinx 框架开发笔记

Zinx:轻量级的 TCP 服务器框架

  • 基础的 Server
  • 简单的连接封装和业务绑定
  • 基础 Router 模块
  • 全局配置
  • 消息封装
  • 多路由模式
  • 读写协程分离
  • 消息队列及多任务
  • 连接管理
  • 连接 属性配置
  • 基于 Zinx 的应用案例

Zinx 架构

初识 Zinx 框架

Zinx - V0.1 构建最基础的 server

Zinx 的最基本的两个模块 zifaceznet

  • ziface 主要是存放一些 Zinx 框架的全部模块的抽象层接口类。

    Zinx 框架的最基本的服务类接口 iserver,定义在该模块中。

  • znet 模块是 Zinx 框架中网络相关功能的实现,所有网络相关模块定义在这里。

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

举报

相关推荐

0 条评论