diff --git a/src/server/cluster/Cluster.go b/src/server/cluster/Cluster.go index 4890647e..71835dd4 100644 --- a/src/server/cluster/Cluster.go +++ b/src/server/cluster/Cluster.go @@ -49,6 +49,11 @@ func Init() { registerFunc(msg.CLUSTER_EXIT, ClusterExit) } +// GetCallbackChanMu 返回 CallbackChan 的读写锁,供外部包安全访问 CallbackChan +func GetCallbackChanMu() *sync.RWMutex { + return &callbackChanMu +} + func Destroy() { if server != nil { log.Release("closing cluster server") diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index e32512e9..6b04a35e 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -282,7 +282,11 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) { func PlayerReplyMsgHandler(data *msg.Msg) (interface{}, error) { // 先处理同步回调 if data.UniKey != "" { - if chanel, ok := mergeCluster.CallbackChan[data.UniKey]; ok { + mergeCluster.GetCallbackChanMu().RLock() + chanel, ok := mergeCluster.CallbackChan[data.UniKey] + mergeCluster.GetCallbackChanMu().RUnlock() + + if ok { log.Debug("reply message ") chanel <- data }