zhengtao 7 месяцев назад
Родитель
Сommit
e5007a12e9

+ 45 - 0
extend/string/string.go

@@ -3,6 +3,7 @@ package mhayaString
 import (
 	"encoding/json"
 	"math/rand"
+	"regexp"
 	"strconv"
 	goStrings "strings"
 )
@@ -155,3 +156,47 @@ func GetRandString(num int) string {
 	}
 	return string(b)
 }
+
+// ConvertToBase58 将给定的整数转换为58进制的字符串表示。
+func ConvertToBase58(num int64) string {
+	if num == 0 {
+		return "1" // 0在58进制中表示为"1"
+	}
+	var result goStrings.Builder
+	digits := "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" // 58进制的基数字符
+	for num > 0 {
+		remainder := num % 58
+		result.WriteByte(digits[remainder])
+		num /= 58
+	}
+	// 因为我们是从低位到高位构建的字符串,所以最终需要反转
+	return reverseString(result.String())
+}
+
+// reverseString 反转字符串
+func reverseString(s string) string {
+	runes := []rune(s)
+	for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
+		runes[i], runes[j] = runes[j], runes[i]
+	}
+	return string(runes)
+}
+
+const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+
+func RandStringBytes(n int) string {
+	b := make([]byte, n)
+	for i := range b {
+		b[i] = letterBytes[rand.Intn(len(letterBytes))]
+	}
+	return string(b)
+}
+
+// ReplaceDigitsWithBase58 在字符串中替换所有的数字为58进制表示
+func ReplaceDigitsWithBase58(input string) string {
+	re := regexp.MustCompile(`\d+`) // 匹配一个或多个数字
+	return re.ReplaceAllStringFunc(input, func(match string) string {
+		num, _ := strconv.ParseInt(match, 10, 64)
+		return ConvertToBase58(num)
+	})
+}

+ 8 - 16
game/game_cluster/internal/guid/guid.go

@@ -1,25 +1,17 @@
 package guid
 
 import (
-	"context"
-	csnowflake "github.com/mhaya/extend/snowflake"
-	"github.com/mhaya/game/game_cluster/internal/mdb"
+	"github.com/google/uuid"
+	cstring "github.com/mhaya/extend/string"
+	"strings"
 )
 
 // Next 生成唯一id
 // 以下几种方式仅供参考:
-// snowflake
-// redis
 func Next() string {
-	node, _ := csnowflake.NewNode(1)
-	var sid string
-	for {
-		id := node.Generate()
-		sid = id.Base58()
-		if mdb.RDB.HExists(context.Background(), "PlayerID", sid).Val() {
-			continue
-		}
-		mdb.RDB.HSet(context.Background(), "PlayerID", sid, 1)
-		return sid
-	}
+	id := uuid.New()
+	s := id.String()
+	output := cstring.ReplaceDigitsWithBase58(s)
+	output = strings.Replace(output, "-", "", -1)
+	return output
 }

+ 3 - 2
game/game_cluster/internal/mdb/mongo_index.go

@@ -124,9 +124,10 @@ func SetCNameAccountIndex() error {
 		{"userName", 1},
 	}
 	indexModel := mongo.IndexModel{
-		Keys: keys,
+		Keys:    keys,
+		Options: options.Index().SetUnique(true), // 设置索引选项,例如唯一索引
 	}
-	err := Index(indexModel, constant.CNameAccount)
+	err := Unique(indexModel, constant.CNameAccount)
 	if err != nil {
 		return err
 	}

+ 26 - 8
game/game_cluster/robot_client/main.go

@@ -8,6 +8,7 @@ import (
 	"github.com/mhaya/game/game_cluster/internal/code"
 	"github.com/mhaya/game/game_cluster/internal/param"
 	mhayaLogger "github.com/mhaya/logger"
+	"math/rand"
 	"strconv"
 	"sync"
 	"time"
@@ -17,9 +18,12 @@ func main() {
 
 	// 定义命令行标志
 	userOffset := flag.Int("userOffset", 0, "用户偏移量")
-	count := flag.Int("count", 50000, "请求总数")
-	qps := flag.Int("qps", 2000, "最大并发数")
-	url := flag.String("url", "", "请求url")
+	count := flag.Int("count", 20000, "请求总数")
+	qps := flag.Int("qps", 50, "最大并发数")
+	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")
+	url3 := flag.String("url3", "http://127.0.0.1:20003", "请求url")
 	duration := flag.Int("duration", 120, "测试持续时间")
 	flag.Parse()
 
@@ -51,7 +55,18 @@ func main() {
 					Platform: "ios",
 					Channel:  "tg",
 				}
-				RunRobot(*url, account, i)
+				n := rand.Intn(1)
+				switch n {
+				case 0:
+					RunRobot(*url, account, i)
+				case 1:
+					RunRobot(*url1, account, i)
+				case 2:
+					RunRobot(*url2, account, i)
+				case 3:
+					RunRobot(*url3, account, i)
+				}
+
 			}()
 		}
 	}()
@@ -187,18 +202,21 @@ func Login(url string, params map[string]interface{}, token string) {
 	requestURL := fmt.Sprintf("%s/login", url)
 	jsonBytes, err := mhayaHttp.PostJSONWithHeader(requestURL, params, token)
 	if err != nil {
-		mhayaLogger.Warn(err)
+		mhayaLogger.Warnf("login err: %v", err)
 		return
 	}
 
 	rsp := &code.Result{}
 	err = jsoniter.Unmarshal(jsonBytes, rsp)
 	if err != nil {
-		mhayaLogger.Warn(err)
+		mhayaLogger.Warnf("login Unmarshal err :%v ", err)
 		return
 	}
-
-	mhayaLogger.Debugf("Login OK")
+	if rsp.Code == 0 {
+		mhayaLogger.Debugf("Login OK : %v", rsp.Code)
+	} else {
+		mhayaLogger.Debugf("Login Fail : %v", rsp.Code)
+	}
 
 }
 

+ 3 - 3
net/actor/system.go

@@ -32,9 +32,9 @@ func NewSystem() *System {
 		localInvokeFunc:  InvokeLocalFunc,
 		remoteInvokeFunc: InvokeRemoteFunc,
 		wg:               &sync.WaitGroup{},
-		callTimeout:      3 * time.Second,
-		arrivalTimeOut:   100,
-		executionTimeout: 100,
+		callTimeout:      10 * time.Second,
+		arrivalTimeOut:   2000,
+		executionTimeout: 2000,
 	}
 
 	return system