2.Zinx-V0.2-简单的连接封装与业务绑定

V0.1版本我们已经实现了一个基础的Server框架,现在我们需要对客户端链接和不同的客户端链接所处理的不同业务再做一层接口封装,当然我们先是把架构搭建起来。

现在在ziface下创建一个属于链接的接口文件iconnection.go,当然他的实现文件我们放在znet下的connection.go中。

2.1 Zinx-V0.2代码实现

A) ziface创建iconnection.go

zinx/ziface/iconnection.go

package ziface

import "net"

//定义连接接口
type IConnection interface {
    //启动连接,让当前连接开始工作
    Start()
    //停止连接,结束当前连接状态M
    Stop()
    //从当前连接获取原始的socket TCPConn
    GetTCPConnection() *net.TCPConn
    //获取当前连接ID
    GetConnID() uint32
    //获取远程客户端地址信息
    RemoteAddr() net.Addr
}

//定义一个统一处理链接业务的接口
type HandFunc func(*net.TCPConn, []byte, int) error

该接口的一些基础方法,代码注释已经介绍的很清楚,这里先简单说明一个HandFunc这个函数类型,这个是所有conn链接在处理业务的函数接口,第一参数是socket原生链接,第二个参数是客户端请求的数据,第三个参数是客户端请求的数据长度。这样,如果我们想要指定一个conn的处理业务,只要定义一个HandFunc类型的函数,然后和该链接绑定就可以了。

B) znet 创建iconnection.go

zinx/znet/connection.go

C) 重新更正一下Server.go中 处理conn的连接业务

zinx/znet/server.go

CallBackToClient是我们给当前客户端conn对象绑定的handle方法,当然目前是server端强制绑定的回显业务,我们之后会丰富框架,让这个用户可以让用户自定义指定handle。

start()方法中,我们主要做了如下的修改:

好了,现在我们已经将connection的连接和handle绑定了,下面我们在测试一下Zinx-V0.2的框架是否可以使用吧。

2.2 使用Zinx-V0.2完成应用程序

实际上,目前Zinx框架的对外接口并未改变,所以V0.1的测试依然有效。

Server.go

启动Server.go

Client.go

启动Client.go进行测试

现在我们已经简单初始了Zinx的雏形,但是目前离我们真正的框架还很远,接下来我们来改进zinx框架。

Last updated

Was this helpful?