Apply .gitignore rules
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
_ "logincenter/internal/game"
|
||||
_ "logincenter/internal/user"
|
||||
)
|
||||
@@ -0,0 +1,71 @@
|
||||
package websocketUtil
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var (
|
||||
wsmap sync.Map
|
||||
errLog func(format string, args ...interface{})
|
||||
debugLog func(format string, args ...interface{})
|
||||
)
|
||||
|
||||
// SetLog
|
||||
// @Description:设置日志回调函数信息
|
||||
// @param errLogFun 错误日志回调函数
|
||||
// @param debugLogFun debug日志回调函数
|
||||
func SetLog(errLogFun, debugLogFun func(format string, args ...interface{})) {
|
||||
errLog = errLogFun
|
||||
debugLog = debugLogFun
|
||||
}
|
||||
|
||||
// Send
|
||||
// @Description: 发送数据
|
||||
// @param wsurl 发送地址
|
||||
// @param st 发送类型,使用websocket下的定义
|
||||
// @param data 发送数据
|
||||
// @return error
|
||||
func Send(wsurl string, st int, data []byte) error {
|
||||
if debugLog == nil || errLog == nil {
|
||||
return errors.New("websocketUtil未设置errLog,debugLog回调函数,请调用websocketUtil.Setlog函数设置相关信息")
|
||||
}
|
||||
|
||||
m, err := getOrAdd(wsurl)
|
||||
if err != nil {
|
||||
errLog(fmt.Sprintf("websocketUtil.Send error:%s", err))
|
||||
return err
|
||||
}
|
||||
|
||||
m.send(st, data)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// getOrAdd
|
||||
// @Description:获取或者添加对象
|
||||
// @param url string
|
||||
// @return *model
|
||||
// @return error
|
||||
func getOrAdd(url string) (*model, error) {
|
||||
var m *model
|
||||
var err error
|
||||
|
||||
v, isOk := wsmap.Load(url)
|
||||
if isOk {
|
||||
m = v.(*model)
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// 不存在,创建对应的socket连接
|
||||
m, err = newModel(url)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 保存到map
|
||||
wsmap.Store(url, m)
|
||||
|
||||
return m, err
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package goroutineMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
"sync"
|
||||
|
||||
"framework/monitorNewMgr"
|
||||
"goutil/logUtil"
|
||||
)
|
||||
|
||||
var (
|
||||
goroutineInfoMap map[string]int = make(map[string]int)
|
||||
goroutineInfoMutex sync.RWMutex
|
||||
goroutineWarnCount int = 50
|
||||
)
|
||||
|
||||
func init() {
|
||||
monitorNewMgr.RegisterMonitorFunc(monitor)
|
||||
}
|
||||
|
||||
// 设置系统协程上报阈值
|
||||
func SetGoroutineWarnCount(warnCount int) {
|
||||
goroutineWarnCount = warnCount
|
||||
}
|
||||
|
||||
func registerGoroutineInfo(goroutineName string, count int) {
|
||||
goroutineInfoMutex.Lock()
|
||||
defer goroutineInfoMutex.Unlock()
|
||||
|
||||
goroutineInfoMap[goroutineName] = count
|
||||
}
|
||||
|
||||
// 监控指定的goroutine
|
||||
func Monitor(goroutineName string) {
|
||||
increaseCount(goroutineName)
|
||||
registerGoroutineInfo(goroutineName, 1)
|
||||
}
|
||||
|
||||
// 只添加数量,不监控
|
||||
func MonitorZero(goroutineName string) {
|
||||
increaseCount(goroutineName)
|
||||
}
|
||||
|
||||
// 释放监控
|
||||
func ReleaseMonitor(goroutineName string) {
|
||||
if r := recover(); r != nil {
|
||||
logUtil.LogUnknownError(r)
|
||||
}
|
||||
|
||||
decreaseCount(goroutineName)
|
||||
}
|
||||
|
||||
func monitor() error {
|
||||
// 判断当前goroutine数量是否达到打印条件(数量查过设置的值就打印)
|
||||
if goroutineWarnCount >= runtime.NumGoroutine() {
|
||||
return nil
|
||||
}
|
||||
/*
|
||||
先记录活跃的goroutine的数量信息
|
||||
然后再判断数量是否匹配
|
||||
*/
|
||||
logGoroutineCountInfo()
|
||||
|
||||
goroutineInfoMutex.RLock()
|
||||
defer goroutineInfoMutex.RUnlock()
|
||||
|
||||
for goroutineName, expectedCount := range goroutineInfoMap {
|
||||
if currCount := getGoroutineCount(goroutineName); currCount != expectedCount {
|
||||
return fmt.Errorf("%s需要%d个goroutine,现在有%d个", goroutineName, expectedCount, currCount)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user