#### 3.2 IRouter 路由配置抽象类
现在我们来给Zinx实现一个非常简单基础的路由功能,目的当然就是为了快速的让Zinx步入到路由的阶段。后续我们会不断的完善路由功能。
##### A\) 创建抽象的IRouter层
在`ziface`下创建`irouter.go`文件
zinx/ziface/irouter.go
```go
package ziface
/*
路由接口, 这里面路由是 使用框架者给该链接自定的 处理业务方法
路由里的IRequest 则包含用该链接的链接信息和该链接的请求数据信息
*/
type IRouter interface{
PreHandle(request IRequest) //在处理conn业务之前的钩子方法
Handle(request IRequest) //处理conn业务的方法
PostHandle(request IRequest) //处理conn业务之后的钩子方法
}
```
我们知道router实际上的作用就是,服务端应用可以给Zinx框架配置当前链接的处理业务方法,之前的Zinx-V0.2我们的Zinx框架处理链接请求的方法是固定的,现在是可以自定义,并且有3种接口可以重写。
`Handle`:是处理当前链接的主业务函数
`PreHandle`:如果需要在主业务函数之前有前置业务,可以重写这个方法
`PostHandle`:如果需要在主业务函数之后又后置业务,可以重写这个方法
当然每个方法都有一个唯一的形参`IRequest`对象,也就是客户端请求过来的连接和请求数据,作为我们业务方法的输入数据。
##### B\) 实现Router类
在`znet`下创建`router.go`文件
```go
package znet
import "zinx/ziface"
//实现router时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写
type BaseRouter struct {}
//这里之所以BaseRouter的方法都为空,
// 是因为有的Router不希望有PreHandle或PostHandle
// 所以Router全部继承BaseRouter的好处是,不需要实现PreHandle和PostHandle也可以实例化
func (br *BaseRouter)PreHandle(req ziface.IRequest){}
func (br *BaseRouter)Handle(req ziface.IRequest){}
func (br *BaseRouter)PostHandle(req ziface.IRequest){}
```
我们当前的Zinx目录结构应该如下:
```bash
.
├── README.md
├── ziface
│ ├── iconnnection.go
│ ├── irequest.go
│ ├── irouter.go
│ └── iserver.go
└── znet
├── connection.go
├── request.go
├── router.go
├── server.go
└── server_test.go
```
- 一、引言
- 1、写在前面
- 2、初探Zinx架构
- 二、初识Zinx框架
- 1. Zinx-V0.1-基础Server
- 2.Zinx-V0.2-简单的连接封装与业务绑定
- 三、Zinx框架基础路由模块
- 3.1 IRequest 消息请求抽象类
- 3.2 IRouter 路由配置抽象类
- 3.3 Zinx-V0.3-集成简单路由功能
- 3.4 Zinx-V0.3代码实现
- 3.5 使用Zinx-V0.3完成应用程序
- 四、Zinx的全局配置
- 4.1 Zinx-V0.4增添全局配置代码实现
- 4.2 使用Zinx-V0.4完成应用程序
- 五、Zinx的消息封装
- 5.1 创建消息封装类型
- 5.2 消息的封包与拆包
- 5.3 Zinx-V0.5代码实现
- 5.4 使用Zinx-V0.5完成应用程序
- 六、Zinx的多路由模式
- 6.1 创建消息管理模块
- 6.2 Zinx-V0.6代码实现
- 6.3 使用Zinx-V0.6完成应用程序
- 七、Zinx的读写分离模型
- 7.1 Zinx-V0.7代码实现
- 7.2 使用Zinx-V0.7完成应用程序
- 八、Zinx的消息队列及多任务机制
- 8.1 创建消息队列
- 8.2 创建及启动Worker工作池
- 8.3 发送消息给消息队列
- 8.4 Zinx-V0.8代码实现
- 8.5 使用Zinx-V0.8完成应用程序
- 九、Zinx的链接管理
- 9.1 创建链接管理模块
- 9.2 链接管理模块集成到Zinx中
- 9.3 链接的带缓冲的发包方法
- 9.4 注册链接启动/停止自定义Hook方法功能
- 9.5 使用Zinx-V0.9完成应用程序
- 十、Zinx的连接属性设置
- 10.1 给链接添加链接配置接口
- 10.2 链接属性方法实现
- 10.3 链接属性Zinx-V0.10单元测试
- 基于Zinx的应用案例
- 一、应用案例介绍
- 二、服务器应用基础协议
- 三、MMO多人在线游戏AOI算法
- 3.1 网络法实现AOI算法
- 3.2 实现AOI格子结构
- 3.3 实现AOI管理模块
- 3.4 求出九宫格
- 3.5 AOI格子添加删除操作
- 3.6 AOI模块单元测试
- 四、数据传输协议protocol buffer
- 4.1 简介
- 4.2 数据交换格式
- 4.3 protobuf环境安装
- 4.4 protobuf语法
- 4.5 编译protobuf
- 4.6 利用protobuf生成的类来编码
- 五、MMO游戏的Proto3协议
- 六、构建项目与用户上线
- 6.1 构建项目
- 6.2用户上线流程
- 七、世界聊天系统实现
- 7.1 世界管理模块
- 7.2 世界聊天系统实现
- 八、上线位置信息同步
- 九、移动位置与AOI广播(未跨越格子)
- 十、玩家下线
- 十一、移动与AOI广播(跨越格子)