42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package clientMgr
|
||
|
||
import (
|
||
"time"
|
||
|
||
"framework/goroutineMgr"
|
||
"goutil/logUtil"
|
||
)
|
||
|
||
func init() {
|
||
// 清理过期的客户端
|
||
go clearExpiredClient()
|
||
}
|
||
|
||
// 清理过期的客户端
|
||
func clearExpiredClient() {
|
||
// 处理goroutine数量
|
||
goroutineName := "clientMgr.clearExpiredClient"
|
||
goroutineMgr.Monitor(goroutineName)
|
||
defer goroutineMgr.ReleaseMonitor(goroutineName)
|
||
|
||
for {
|
||
// 休眠指定的时间(单位:秒)(放在此处是因为程序刚启动时并没有过期的客户端,所以先不用占用资源;并且此时LogPath尚未设置,如果直接执行后面的代码会出现panic异常)
|
||
time.Sleep(5 * time.Minute)
|
||
|
||
// 获取过期的客户端列表
|
||
expiredClientList := getExpiredClientList()
|
||
expiredClientCount := len(expiredClientList)
|
||
beforeClientCount := getClientCount()
|
||
|
||
// 客户端断开
|
||
if expiredClientCount > 0 {
|
||
for _, item := range expiredClientList {
|
||
Disconnect(item)
|
||
}
|
||
}
|
||
|
||
// 记录日志
|
||
logUtil.DebugLog("清理前的客户端数量为:%d,本次清理不活跃的客户端数量为:%d", beforeClientCount, expiredClientCount)
|
||
}
|
||
}
|