Zinx-V0.3框架基础路由模块

Zinx-V0.3框架基础路由模块

1.IRequest

​ 把客户端请求的连接信息 和 请求的数据,放在一个叫Request的请求类里,这样的好处是我们可以从Request里得到全部客户端的请求信息,也为我们之后拓展框架有一定的作用,一旦客户端有额外的含义的数据信息,都可以放在这个Request里

1.1.ziface
type IRequest interface {
 	//得到当前的请求的链接
 	GetConnection() IConnection
 	//得到链接的数据
 	GetData() []byte
 	//得到链接的长度
 	GetDataLen() int
 }
1.2.znet
type Request struct {
	//链接信息
	conn ziface.IConnection
	//数据内容
	data []byte
	//数据长度
	len int
}
func NewReqeust(conn ziface.IConnection, data []byte, len int) ziface.IRequest {
	req := &Request{
		conn:conn,
		data:data,
		len:len,
	}

	return req
}
//得到当前的请求的链接
func(r *Request) GetConnection() ziface.IConnection {
	return r.conn
}

//得到链接的数据
func(r *Request) GetData() []byte {
	return r.data
}

//得到链接的长度
func(r *Request)  GetDataLen() int {
	return r.len
}

​ 相当于是把一个链接的一个信息进行了一个封装,下边的路由函数就是去处理这个封装,在读到一个buf后就能生成一个request req := NewReqeust(connection, buf, cnt)

2.Router
2.1.ziface

创建抽象层

type IRouter interface {
	//处理业务之前的方法
	PreHandle(request IRequest)
	//真正处理业务的方法
	Handle(request IRequest)
	//处理业务之后的方法
	PostHandle(request IRequest)
}
2.2.实现层
type BaseRouter struct {}
func (br *BaseRouter)PreHandle(req ziface.IRequest){}
func (br *BaseRouter)Handle(req ziface.IRequest){}
func (br *BaseRouter)PostHandle(req ziface.IRequest){}

​ 实现router时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写。这里之所以BaseRouter的方法都为空,是因为有的Router不希望有PreHandle或PostHandle所以Router全部继承BaseRouter的好处是,不需要实现PreHandle和PostHandle也可以实例化

2.3.IServer中添加添加路由功能
type IServer interface{
		......
	//路由功能:给当前服务注册一个路由业务方法,供客户端链接处理使用
	AddRouter(router IRouter)
}
2.4.Server类中添加Router成员
type Server struct {
	......
	Router ziface.IRouter
}

NewServer中也要对应更改,添加路由信息

2.5.Connection类绑定一个Router成员

在Connection的Start中不再用回调函数处理Request,而是改用Router处理

在生成IConnection时,不再传回调函数,而是传Irouter

2.6在服务端自定义一个路由来处理Request
type PingRouter struct {
	znet.BaseRouter //一定要先基础BaseRouter
}

//Test PreHandle
func (this *PingRouter) PreHandle(request ziface.IRequest) {
	。。。。。
}
//Test Handle
func (this *PingRouter) Handle(request ziface.IRequest) {
	。。。。。
}

//Test PostHandle
func (this *PingRouter) PostHandle(request ziface.IRequest) {
	。。。。。
}

func main(){
	//创建一个server句柄
	s := znet.NewServer("[zinx V0.3]")

	s.AddRouter(&PingRouter{})

	//2 开启服务
	s.Serve()
}

总的来说,Server实现了基础的连接。Connection是把一个链接进行封装,包括连接本身、编号、处理链接内容的路由函数等。Request把一个链接和一条消息进行了封装。Router是给用户预留的一个接口,让用户自己定义用来处理链接的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值