【zinx】Golang轻量级TCP服务器框架(九)—— TCP多客户端链接链接管理模块

Golang轻量级TCP服务器框架(九)—— TCP多客户端链接链接管理模块

原作者视频地址:zinx-Golang轻量级TCP服务器框架
本人为自学整理的文档,梳理思考开发框架的基本思路,方法,以及视频中不理解的地方。
若想学习,强烈建议直接观看原作视频即可。
可在下方留言交流。

1.目的

为什么设置一个多客户端链接管理模块?

在该篇之前,所有的实验都是仅仅只有一个客户端连接服务器。
如果此时有N多个客户端链接进来的话。我们之前的链接就获取不到了,但是其开辟的协程还是存在的。
我们的server为了方便对这些客户端链接进行管理。
比如某个客户端,总没有信息过来、或者某个客户端总是发送恶意消息,我们就需要立即断开它。
再或者我们需要进行限流,控制客户端的数量等。

2.IConnmanager的接口设计

type IConnmanager interface {
	AddConn(conn IConnection)
	RemoveConn(conn IConnection)
	GetConn(connId uint32) (IConnection,error)
	Len() int
	ClearConn()
}

这里我们仅仅是设计了,几个简单的接口,如果你还需要其他功能,可以继续添加。

3.connmanager结构体的实现

type connmanager struct {
	connections map[uint32] ziface.IConnection
	connLock sync.Mutex
}

//创建当前连接的方法
func NewConnManager() *connmanager {
	return &connmanager{
		connections: make(map[uint32] ziface.IConnection),
	}
}

func (cm *connmanager) AddConn(conn ziface.IConnection) {
	cm.connLock.Lock()
	cm.connections[conn.GetConnID()] = conn
	cm.connLock.Unlock()
}
func (cm *connmanager) RemoveConn(conn ziface.IConnection) {
	cm.connLock.Lock()
	delete(cm.connections, conn.GetConnID())
	cm.connLock.Unlock()
}
func (cm *connmanager) GetConn(connId uint32) (ziface.IConnection,error) {
	cm.connLock.Lock()
	conn, ok := cm.connections[connId]
	if !ok {
		return nil,errors.New("conn is nothing")
	}
	cm.connLock.Unlock()
	return conn, nil
}
func (cm *connmanager) Len() int {
	cm.connLock.Lock()
	length := len(cm.connections)
	cm.connLock.Unlock()
	return length
}
func (cm *connmanager) ClearConn() {
	cm.connLock.Lock()
	for connID, conn := range cm.connections {
		conn.Stop()
		delete(cm.connections, connID)
	}
	cm.connLock.Unlock()
}

这里仅仅是对客户端链接管理的一些操作。上述提到的对客户端行为的检测,不属于此处的内容。

4.server的集成

该结构体肯定由server管理的,所以需要给server添加成员

type server struct {
	//服务器的名称
	name string
	//ip的版本
	ipVersion string
	//ip地址
	ip string
	//ip监听端口
	port int
	//路由
	msgHandler ziface.IMsgHandler
	//该server的客户端链接管理器
	connMgr ziface.IConnmanager    //客户端链接管理模块
}

server集成的代码这里就不再展示了,可以去看原作的github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辛集电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值