zinx

 

[TOC]

Zinx-轻量级tcp服务器框架

1621497265937

v0.1-基础的server

方法

  • 启动服务器:Go-TCP下基本的服务器开发:1.创建addr 2.创建listener 3.获取连接处理业务
  • 停止服务器:资源回收、状态改变
  • 运行服务器:调用start方法,启动基本的监听功能,后续添加扩展
  • 初始化服务器:构造方法,返回一个服务器对象

属性

  • name
  • ip
  • port

v0.2-连接封装和业务绑定

连接模块

方法

  • 启动连接
  • 停止连接
  • 获取当前连接的conn对象
  • 得到连接id
  • 得到客户端的地址端口
  • 发送数据的方法
  • 业务处理函数?

属性

  • conn对象
  • 连接的id
  • 当前连接的状态(是否关闭)
  • 与当前连接所绑定的处理业务的方法
  • 与主线程交互的channel,用于告知主线程该连接将退出

v3.0 - 基础router模块

request请求封装

将连接和数据绑定在一起,作为一个原子的请求对象

方法

  • 获取连接对象
  • 获取请求数据

属性

  • 连接对象IConnection
  • 请求数据

router模块

方法

  • 处理业务之前的方法
  • 处理业务的方法
  • 处理业务之后的方法

集成router模块

IServer增加添加路由功能

Server增加Router成员

Connection绑定Router成员

在Connection中调用已经注册的Router处理业务

v0.4 - 配置模块

暂且用json

{
    "Name": "???",
    "Host": "0.0.0.0",
    "TcpPort": 8999,
    "MaxConn": 3
}

用户提供,/conf/zinx.json

创建一个全局配置模块

  • init方法 读取用户配置好的Json文件
  • 使用配置参数

v0.5 - 封装消息

属性

  • 消息id
  • 消息长度
  • 消息的内容

方法

  • set get

TLV(type length value)序列化解决粘包拆包

1621577774550

集成封包拆包模块

  • 将Message添加到Request属性中
  • 修改Connection连接读取数据的机制
  • 给连接提供发包机制

v0.6 - 多路由

消息管理模块

根据不同的消息id连接到不同的路由

属性

  • Map<MsgId, Router>

方法

  • 找到路由
  • 注册路由

集成到Server

  • 将server模块中的Router替换成MsgHandler
  • 将Connection模块中Router替换成MsgHandler
  • 修改Connection中对Router的调用

v0.7 - 读写分离

1621672377995

  • 分别创建读写Go程
  • Reader将发送内容通过Channel交给Writer

tip:不一定是创建两个Connection对象,而是对象中分别创建Writer和Reader两个Go程

V0.8 - 消息队列

1621674451852

在MsgHandler中创建BlockingQueue和WorkerPool,因为该对象在Server初始化时被创建,一一对应

V0.9 - 连接管理、连接Hook

manager控制连接生成,数量等

属性

  • 已经创建的Conn
  • 读写锁

方法

  • CRUD

集成

  • Server持有ConnManager
  • 新建前判断是否超出ConnManager容量,拒绝策略?
  • 新建连接后加入ConnManager管理
  • 断开的连接从ConnManager移除

使server暴露ConnManager?使conn持有server?

Server负责连接创建之后、销毁之前的hook(已有的hook:PreHandle、Handler、PostHandle)

v1.0 - 连接属性配置

key-val 标签罢了