Zinx-V0.9 链接管理模块

链接管理模块
属性

Connection链接的集合

针对map的互斥锁

方法

添加链接

//添加链接
func (cm *ConnManager) Add(conn ziface.IConnection) {
	//加锁
	cm.connLock.Lock()
	defer cm.connLock.Unlock()

	cm.connections[conn.GetConnID()] = conn

	fmt.Println("Add connid = ", conn.GetConnID(), "to manager succ")
}

删除链接

func (cm *ConnManager) Remove(connID uint32) {
	//加锁
	cm.connLock.Lock()
	defer cm.connLock.Unlock()

	delete(cm.connections, connID)


	fmt.Println("delete connid = ", connID, "from manager succ")

}

根据链接ID得到链接

//根据链接ID得到链接
func (cm *ConnManager) Get(connID uint32) (ziface.IConnection, error) {
	//加读锁
	cm.connLock.RLock()
	defer cm.connLock.RUnlock()

	if conn, ok := cm.connections[connID]; ok {
		//找到了
		return conn, nil
	} else {
		return nil, errors.New("connection not Found!")
	}
}

得到目前服务器的链接总个数

//得到当前服务器链接的总个数
func (cm *ConnManager) Len() uint32 {
	return uint32(len(cm.connections))
}

清空全部链接方法

//清空链接
func (cm *ConnManager) ClearConn() {
	//加锁
	cm.connLock.Lock()
	defer cm.connLock.Unlock()

	//遍历删除
	for connID, conn := range cm.connections {
		//将全部的conn 关闭
		conn.Stop()

		//删除链接
		delete(cm.connections, connID)
	}

	fmt.Println("Clear All Conections succ! conn num = ", cm.Len())

}
将管理模块集成到zinx框架中
  1. 给connection增加一个属于server的属性
  2. 将ConnManager加入到server模块
  3. 每次成功与客户端连接后,判断最大链接数,没达到则将新链接添加到链接管理模块
  4. 每次与客户端的链接断开后,将链接从链接管理模块中删除
  5. 服务器停止后,清空全部链接
全局配置

最大链接数量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值