集群架构优化

This commit is contained in:
hahwu 2025-12-01 18:45:22 +08:00
parent ca4a593d69
commit 8c5b63a49a
5 changed files with 25 additions and 6 deletions

1
.gitignore vendored
View File

@ -13,3 +13,4 @@ src/server/unit_test.go
src/server/teLog/*
src/server/teLog/log.2024-11-28
src/server/logs/ga_log/*.log
src/server/conf/server.json

View File

@ -127,6 +127,13 @@ func SendServerMsg(m *msg.Msg, serverId int) error {
func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) {
m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m))
// 先注册回调通道,避免发送出去后对方快速返回导致丢失
newChan := make(chan *msg.Msg, 1)
registerChanel(m.UniKey, newChan)
defer unregisterChanel(m.UniKey)
// 之后再发送消息
if v, ok := serverAgent.Load(serverId); ok {
data, err := GoUtil.GobMarshal(m)
if err != nil {
@ -134,14 +141,14 @@ func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) {
return nil, err
}
v.(network.Agent).WriteMsg(data)
} else {
return nil, fmt.Errorf("server %d not online", serverId)
}
newChan := make(chan *msg.Msg, 1)
registerChanel(m.UniKey, newChan)
// 等待返回(直接接收一次)
timeout := time.After(15 * time.Second)
select {
case <-newChan:
backm := <-newChan
unregisterChanel(m.UniKey)
case backm := <-newChan:
if backm == nil {
return nil, fmt.Errorf("server %d not response", serverId)
}
@ -169,9 +176,9 @@ func processMsg(a *Agent, m *msg.Msg) error {
if m.UniKey != "" {
if chanel, ok := CallbackChan[m.UniKey]; ok {
chanel <- m
}
return nil
}
}
if fun, ok := FuncMap[m.Type]; ok {
err = fun(a, m)
} else {

View File

@ -92,6 +92,7 @@ func (f *FriendMgr) Init() {
f.RegisterHandler(msg.HANDLE_TYPE_VAR_EXPIRE_SET, f.SetExpireVarData)
f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_LOGIN, f.SendMsgToCenter)
f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, f.SendMsgToCenter)
}
func (f *FriendMgr) getData() *FirendData {
@ -275,3 +276,11 @@ func FriendMgrCall(m *msg.Msg) interface{} {
}
return G_GameLogicPtr.FriendMgrCall(m.Clone())
}
func SendMsgToCenter(m *msg.Msg) error {
return mergeCluster.SendServerMsg(m, conf.Server.CenterNode)
}
func CallMsgToCenter(m *msg.Msg) (interface{}, error) {
return mergeCluster.CallServerMsg(m, conf.Server.CenterNode)
}

View File

@ -110,4 +110,5 @@ func init() {
gob.Register(&GameResult{})
gob.Register(&CatnipMsg{})
gob.Register(&CatnipLock{})
gob.Register(CRank{})
}

View File

@ -110,6 +110,7 @@ const (
HANDLE_TYPE_CHAMPSHIP_LOGIN // 锦标赛登录
HANDLE_TYPE_CHAMPSHIP_RANK_INFO // 锦标赛排名信息
HANDLE_TYPE_CHAMPSHIP_MY_RANK // 锦标赛我的排名
)