zhengtao преди 7 месеца
родител
ревизия
792bb0ad1d

+ 2 - 0
game/game_cluster/internal/constant/constant.go

@@ -7,6 +7,8 @@ const (
 	CountryRankKey = "countryRank"
 	PlayerBaseKey  = "playerBase"
 
+	TotalUserKey = "totalUser"
+
 	DrawHourKey   = "DrawHour"
 	DrawDailyKey  = "drawDaily"
 	DrawWeeklyKey = "drawWeekly"

+ 57 - 11
game/game_cluster/internal/mdb/component.go

@@ -1,12 +1,16 @@
 package mdb
 
 import (
+	"context"
+	"crypto/tls"
 	"github.com/go-redis/redis/v8"
 	mhayaMongo "github.com/mhaya/components/mongo"
 	clog "github.com/mhaya/logger"
 	cactor "github.com/mhaya/net/actor"
 	cprofile "github.com/mhaya/profile"
 	"go.mongodb.org/mongo-driver/mongo"
+	"strings"
+	"time"
 )
 
 type ActorDB struct {
@@ -34,19 +38,61 @@ func (p *ActorDB) OnInit() {
 	dbID := p.App().Settings().GetConfig("db_id_list").GetString("game_db_id")
 	MDB = mongo.GetDb(dbID)
 	if MDB == nil {
-		clog.Panic("game_db_id not found")
+		clog.Panicf("game_db_id not found")
 	}
 	redisConfig := cprofile.GetConfig("redis")
-	/*	tlsConfig := &tls.Config{
-		MinVersion:               tls.VersionTLS12,
-		PreferServerCipherSuites: true,
-	}*/
-	RDB = redis.NewUniversalClient(&redis.UniversalOptions{
-		Addrs:    []string{redisConfig.GetString("address")},
-		Password: redisConfig.GetString("password"),
-		DB:       redisConfig.GetInt("db"),
-		//TLSConfig: tlsConfig,
-	})
+	addr := strings.Split(redisConfig.GetString("address"), ",")
+	isTls := redisConfig.GetInt("tls", 0)
+	if isTls == 1 {
+		tlsConfig := &tls.Config{
+			MinVersion:               tls.VersionTLS12,
+			PreferServerCipherSuites: true,
+		}
+		/*	RDB = redis.NewUniversalClient(&redis.UniversalOptions{
+			Addrs:     []string{redisConfig.GetString("address")},
+			Password:  redisConfig.GetString("password"),
+			DB:        redisConfig.GetInt("db"),
+			TLSConfig: tlsConfig,
+		})*/
+
+		clusterOptions := &redis.ClusterOptions{
+			Addrs:        addr,
+			Password:     "",   // 如果启用了身份验证,请提供密码
+			PoolSize:     1000, // 每个节点的最大连接数
+			DialTimeout:  10 * time.Second,
+			ReadTimeout:  30 * time.Second,
+			WriteTimeout: 30 * time.Second,
+			TLSConfig:    tlsConfig,
+		}
+
+		// 创建集群客户端
+		rdb := redis.NewClusterClient(clusterOptions)
+		// 测试连接
+		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+		defer cancel()
+
+		pong, err := rdb.Ping(ctx).Result()
+		if err != nil {
+			clog.Panicf("无法连接到Redis集群: %v ,param:%v", err, addr)
+		}
+		clog.Warnf("连接到Redis集群: %v,param:%v", pong, addr)
+		RDB = rdb
+	} else {
+		RDB = redis.NewUniversalClient(&redis.UniversalOptions{
+			Addrs:    addr,
+			Password: redisConfig.GetString("password"),
+			DB:       redisConfig.GetInt("db"),
+		})
+		// 测试连接
+		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+		defer cancel()
+
+		pong, err := RDB.Ping(ctx).Result()
+		if err != nil {
+			clog.Panicf("无法连接到Redis: %v ,param:%v", err, addr)
+		}
+		clog.Warnf("连接到Redis: %v,param:%v", pong, addr)
+	}
 
 	if p.App().NodeId() == "m-center" {
 		SetIndex()

+ 10 - 9
game/game_cluster/internal/mdb/models/account.go

@@ -59,18 +59,18 @@ func (ac *Account) AccountRegisterOrLogin(req *param.LoginReq) (*Account, int32)
 		clog.Debugf("[Account] AccountRegisterOrLogin error: %v", err)
 	}
 	findFilter := bson.M{"openId": req.OpenID}
-	if len(acc) == 0 {
-		err = mdb.MDB.Collection(constant.CNameAccount).FindOne(context.Background(), findFilter).Decode(&account)
-		if err != nil && err != mongo.ErrNoDocuments {
-			clog.Errorf("Failed to AccountRegisterOrLogin select err request: %v  err = %v", req, err.Error())
-			return nil, code.LoginError
-		}
-	} else {
+	if len(acc) > 0 {
 		err = jsoniter.Unmarshal(acc, &account)
 		if err != nil {
 			clog.Debugf("[Account] unmarshal AccountRegisterOrLogin data error: %v", err)
 			return nil, code.LoginError
 		}
+	} else {
+		err = mdb.MDB.Collection(constant.CNameAccount).FindOne(context.Background(), findFilter).Decode(&account)
+		if err != nil && err != mongo.ErrNoDocuments {
+			clog.Errorf("Failed to AccountRegisterOrLogin select err request: %v  err = %v", req, err.Error())
+			return nil, code.LoginError
+		}
 	}
 
 	// todo 测试代码
@@ -145,8 +145,9 @@ func (ac *Account) AccountRegisterOrLogin(req *param.LoginReq) (*Account, int32)
 	// 新用户触发币安升级逻辑
 	// 当前级别
 	lvID, _ := mdb.RDB.Get(context.Background(), constant.RocketLvKey).Int()
-	// 当前用户数
-	userNum, _ := mdb.MDB.Collection(constant.CNamePlayer).CountDocuments(context.Background(), bson.M{})
+	userNum := mdb.RDB.IncrBy(context.Background(), constant.TotalUserKey, 1).Val()
+	/*	// 当前用户数
+		userNum, _ := mdb.MDB.Collection(constant.CNamePlayer).CountDocuments(context.Background(), bson.M{})*/
 
 	roConfig := data.RocketLvConfig.GetAll()
 

+ 10 - 11
game/game_cluster/nodes/game/module/player/actor_player.go

@@ -14,7 +14,6 @@ import (
 	"github.com/mhaya/game/game_cluster/internal/code"
 	"github.com/mhaya/game/game_cluster/internal/constant"
 	"github.com/mhaya/game/game_cluster/internal/data"
-	"github.com/mhaya/game/game_cluster/internal/event"
 	"github.com/mhaya/game/game_cluster/internal/mdb"
 	"github.com/mhaya/game/game_cluster/internal/mdb/models"
 	"github.com/mhaya/game/game_cluster/internal/param"
@@ -237,6 +236,7 @@ func (p *actorPlayer) setRedisAll() {
 			return
 		}
 		mdb.RDB.Set(ctx, fmt.Sprintf("%v:%v", constant.CNamePlayer, p.Player.OpenId), jsonData, time.Hour*3*24)
+		p.dirty = false
 	}
 }
 
@@ -426,13 +426,13 @@ func (p *actorPlayer) playerSessionClose() {
 func (p *actorPlayer) sessionClose() {
 	online.UnBindPlayer(p.uid)
 	p.setDb()
-	p.SetRewardToDB()
-	mdb.RDB.HDel(context.Background(), fmt.Sprintf("%v:%v", constant.CNamePlayer, p.App().NodeId()), string(p.uid))
-
-	logoutEvent := event.NewPlayerLogout(p.ActorID(), p.playerId, p.targetPath)
+	//p.SetRewardToDB()
+	p.setRedisAll()
+	//logoutEvent := event.NewPlayerLogout(p.ActorID(), p.playerId, p.targetPath)
 	p.isOnline = false
 	p.Exit()
-	p.PostEvent(&logoutEvent)
+	models.SetServerRecord(p.App().NodeId(), online.Count())
+	//p.PostEvent(&logoutEvent)
 }
 
 func (p *actorPlayer) Init(req *token.Token) {
@@ -480,9 +480,7 @@ func (p *actorPlayer) Init(req *token.Token) {
 		clog.Debugf("[Init] newUser userName = %s openId = %s", p.Player.UserName, p.Player.OpenId)
 		p.botInvite()
 	}
-	if len(p.Player.PlayerReward) == 0 {
-		p.Player.PlayerReward = make(map[int]*models.PlayerRewardBase)
-	}
+
 }
 
 func (p *actorPlayer) InitBase(uid string) int32 {
@@ -557,8 +555,9 @@ func (p *actorPlayer) login(req *token.Token) (*models.Player, int32) {
 	online.BindPlayer(p.Player.UserName, p.uid, req.TargetPath)
 
 	// 角色登录事件
-	loginEvent := event.NewPlayerLogin(p.ActorID(), req)
-	p.PostEvent(&loginEvent)
+	models.SetServerRecord(p.App().NodeId(), online.Count())
+	/*	loginEvent := event.NewPlayerLogin(p.ActorID(), req)
+		p.PostEvent(&loginEvent)*/
 
 	//// todo 测试代码
 	//p.Player.JoinIP = "13.229.223.106"

+ 3 - 3
game/game_cluster/robot_client/main.go

@@ -17,9 +17,9 @@ import (
 func main() {
 
 	// 定义命令行标志
-	userOffset := flag.Int("userOffset", 400001, "用户偏移量")
-	count := flag.Int("count", 50000, "请求总数")
-	qps := flag.Int("qps", 200, "最大并发数")
+	userOffset := flag.Int("userOffset", 100001, "用户偏移量")
+	count := flag.Int("count", 100000, "请求总数")
+	qps := flag.Int("qps", 500, "最大并发数")
 	url := flag.String("url", "http://127.0.0.1:20000", "请求url")
 	url1 := flag.String("url1", "http://127.0.0.1:20001", "请求url")
 	url2 := flag.String("url2", "http://127.0.0.1:20002", "请求url")