[TOC]
Zinx-轻量级tcp服务器框架
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)序列化解决粘包拆包
集成封包拆包模块
- 将Message添加到Request属性中
- 修改Connection连接读取数据的机制
- 给连接提供发包机制
v0.6 - 多路由
消息管理模块
根据不同的消息id连接到不同的路由
属性
Map<MsgId, Router>
方法
- 找到路由
- 注册路由
集成到Server
- 将server模块中的Router替换成MsgHandler
- 将Connection模块中Router替换成MsgHandler
- 修改Connection中对Router的调用
v0.7 - 读写分离
- 分别创建读写Go程
- Reader将发送内容通过Channel交给Writer
tip:不一定是创建两个Connection对象,而是对象中分别创建Writer和Reader两个Go程
V0.8 - 消息队列
在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 标签罢了