前言
- 之前connection使用StartReader对客户端的数据
- 接下来我们就要对Zinx做⼀个⼩⼩的改变,就是与客户端进修数据交互的Gouroutine由⼀个变成两个,⼀个专⻔负责从客户端读取数据,⼀个专⻔负责向客户端写数据。这么设计有什么好处,当然是⽬的就是⾼内聚,模块的功能单⼀
- Server依然是处理客户端的响应,主要关键的⼏个⽅法是Listen、Accept等。当建⽴与客户端的套接字后,那么就会开启两个Goroutine分别处理读数据业务和写数据业务,读写数据之间的消息通过⼀个Channel传递
一、实现思路
二、项目结构
与之前的zinxV0.6一样,没有变化
三、源码修改
zinx/znet/connection.go
- Connection定义添加channel
type Connection struct {
//当前链接的socket TCP套接字
Conn *net.TCPConn
//链接的ID
ConnID uint32
//当前的链接状态
isClosed bool
//告知当前链接已经退出的/停止 channel(由Reader告知Writer退出)
ExitChan chan bool
//无缓冲d管道,用于读、写Goroutine之间的消息通信
msgChan chan []byte
//消息的管理MsgID 和对应的处理业务API关系
MsgHandler ziface.IMsgHandle
}
- 初始化链接方法增加channel
//初始化链接模块的方法
func NewConnection(conn *net.TCPConn, connID uint32, msgHandler ziface.IMsgHandle) *Connection {
c := &Connection{
C