请求管理
1. 方法
type IRequest interface {
//获取当前连接
GetConnection() IConnection
//获取消息数据
GetData() []byte
//获取ID
GetID() uint32
//获取数据长度
}
以上为每个请求能用到的方法,获取到的都是当前请求的数据
2. 例子
s.On(1, func(request knet.IRequest) {
fmt.Printf("[Router] Recv from %s, ID = %d Data = %s\n",
request.GetConnection().RemoteAddr().String(),
request.GetID(), request.GetData()
)
request.GetConnection().Send(request.GetID(), request.GetData())
})
s.On(2, func(request knet.IRequest) {
fmt.Printf("[Router] Recv from %s, ID = %d Data = %s\n",
request.GetConnection().RemoteAddr().String(),
request.GetID(), request.GetData()
)
request.GetConnection().Send(request.GetID(), request.GetData())
})
每当有连接进入都会产生一个Connection,以上用法将ID和路由绑定后,有数据到达服务器,服务器会通过Connection把数据整理,如果有粘包会先解包,并生成一个Request,所有的路由会通过Request计算后在指定的工作池中运行