Zinx-V0.2 链接模块和request模块

    xiaoxiao2022-07-13  159

    Zinx-V0.2

    链接模块

    链接的封装和业务的绑定

    属性

    原生套接字 net.Conn

    链接ID uint32

    当前的conn是否是关闭状态isClosed bool

    与当前链接绑定的客户端业务

    方法
    启动链接:当链接模块进行,读写操作。 //先进行读业务 go c.StartReader //再进行写业务 处理读业务的Reader方法,调用已经注册好的Handle方法 func (c *Connection) StartReader() { defer c.Stop() for { buf := make([]byte, 512) cnt, err := c.Conn.Read(buf) if err != nil { fmt.Println("recv fub err ", err) continue } //回显 if err := c.handleAPI(c.Conn, buf, cnt); err != nil { fmt.Println("ConnID") } } } 停止链接:关闭套接字/做一些资源回收获取链接ID获取链接的原生socket套接字查看对端客户端的IP和端口发送数据的方法Send
    Request模块
    属性

    链接

    数据

    数据长度

    方法

    得到数据长度方法

    得到当前请求的链接

    得到链接的数据

    抽象层
    package ziface /* 抽象 IRequest 一次性请求的数据封装 */ type IRequest interface { //得到当前的请求的链接 GetConnection() IConnection //得到链接的数据 GetData() []byte //得到链接的长度 GetDataLen() int }
    实现层
    package net import "zinx/ziface" 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 } //将当前一次性得到的对端客户端请求的数据 封装成一个Request req := NewReqeust(c, buf, cnt) //将数据 传递给我们 定义好的Handle Callback方法 if err := c.handleAPI(req); err != nil { fmt.Println("ConnID", c.ConnID, "Handle is error", err) break
    业务层
    func CallBackBusi(request ziface.IRequest) error { //回显业务 fmt.Println("【conn Handle】 CallBack..") c := request.GetConnection().GetTCPConnection() buf := request.GetData() cnt := request.GetDataLen() if _, err := c.Write(buf[:cnt]);err !=nil { fmt.Println("write back err ", err) return err } return nil }
    最新回复(0)