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()) }最大链接数量