集群架构优化
This commit is contained in:
parent
ca4a593d69
commit
8c5b63a49a
1
.gitignore
vendored
1
.gitignore
vendored
@ -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
|
||||
|
||||
@ -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,8 +176,8 @@ func processMsg(a *Agent, m *msg.Msg) error {
|
||||
if m.UniKey != "" {
|
||||
if chanel, ok := CallbackChan[m.UniKey]; ok {
|
||||
chanel <- m
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if fun, ok := FuncMap[m.Type]; ok {
|
||||
err = fun(a, m)
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -110,4 +110,5 @@ func init() {
|
||||
gob.Register(&GameResult{})
|
||||
gob.Register(&CatnipMsg{})
|
||||
gob.Register(&CatnipLock{})
|
||||
gob.Register(CRank{})
|
||||
}
|
||||
|
||||
@ -110,6 +110,7 @@ const (
|
||||
|
||||
HANDLE_TYPE_CHAMPSHIP_LOGIN // 锦标赛登录
|
||||
HANDLE_TYPE_CHAMPSHIP_RANK_INFO // 锦标赛排名信息
|
||||
HANDLE_TYPE_CHAMPSHIP_MY_RANK // 锦标赛我的排名
|
||||
|
||||
)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user