1.离线玩家数据加分布式锁操作

2.修复聊天记录错乱
3.修复重启服务器后无法登录
This commit is contained in:
flswld
2023-02-12 23:47:44 +08:00
parent 0b3c075402
commit ddecfdea12
11 changed files with 108 additions and 35 deletions

View File

@@ -23,12 +23,12 @@ import (
const (
ConnSynPacketFreqLimit = 100 // 连接建立握手包每秒发包频率限制
RecvPacketFreqLimit = 100 // 客户端上行每秒发包频率限制
RecvPacketFreqLimit = 200 // 客户端上行每秒发包频率限制
SendPacketFreqLimit = 1000 // 服务器下行每秒发包频率限制
PacketMaxLen = 343 * 1024 // 最大应用层包长度
ConnRecvTimeout = 30 // 收包超时时间 秒
ConnSendTimeout = 10 // 发包超时时间 秒
MaxClientConnNumLimit = 2 // 最大客户端连接数限制
MaxClientConnNumLimit = 1000 // 最大客户端连接数限制
)
var CLIENT_CONN_NUM int32 = 0 // 当前客户端连接数

View File

@@ -295,7 +295,9 @@ func (k *KcpConnectManager) sendMsgHandle() {
GameMsg: gameMsg,
})
case mq.ServerUserOnlineStateChangeNotify:
// 收到GS玩家离线完成通知 唤醒存在的顶号登录流程
// 收到GS玩家离线完成通知
logger.Debug("global player online state change, uid: %v, online: %v, gs appid: %v",
serverMsg.UserId, serverMsg.IsOnline, netMsg.OriginServerAppId)
if serverMsg.IsOnline {
k.globalGsOnlineMapLock.Lock()
k.globalGsOnlineMap[serverMsg.UserId] = netMsg.OriginServerAppId
@@ -308,6 +310,8 @@ func (k *KcpConnectManager) sendMsgHandle() {
if !exist {
continue
}
// 唤醒存在的顶号登录流程
logger.Info("awake interrupt login, uid: %v", serverMsg.UserId)
kickFinishNotifyChan <- true
}
}
@@ -400,6 +404,7 @@ func (k *KcpConnectManager) getPlayerToken(req *proto.GetPlayerTokenReq, session
userId: uid,
kickFinishNotifyChan: kickFinishNotifyChan,
}
logger.Info("run local interrupt login wait, uid: %v", uid)
<-kickFinishNotifyChan
}
k.globalGsOnlineMapLock.RLock()
@@ -421,6 +426,7 @@ func (k *KcpConnectManager) getPlayerToken(req *proto.GetPlayerTokenReq, session
userId: uid,
kickFinishNotifyChan: kickFinishNotifyChan,
}
logger.Info("run global interrupt login wait, uid: %v", uid)
<-kickFinishNotifyChan
}
// 关联玩家uid和连接信息