From d736c7f77d7b27e272293709af93a5dd1048e613 Mon Sep 17 00:00:00 2001 From: meixiongfeng <766881921@qq.com> Date: Thu, 8 Dec 2022 15:51:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=B6=88=E6=81=AF=E7=9B=91?= =?UTF-8?q?=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/gm/api_cmd.go | 1 + modules/gm/module.go | 10 ++++ stress/robot/robot.go | 69 ++++++++++++++++++++++---- stress/server/dispose.go | 9 ++-- stress/server/golink/websocket_link.go | 22 +++++--- stress/server/statistics/statistics.go | 4 +- stress/stress.go | 7 +-- 7 files changed, 98 insertions(+), 24 deletions(-) diff --git a/modules/gm/api_cmd.go b/modules/gm/api_cmd.go index 5ccdc4077..9cc9f94dd 100644 --- a/modules/gm/api_cmd.go +++ b/modules/gm/api_cmd.go @@ -29,6 +29,7 @@ import ( 14、bingo:arena,100 // 设置竞技场用户积分 15、bingo:sociatyexp,100 // 设置工会经验 15、bingo:sociatyactivity,100 // 设置工会活跃 +15、bingo:alltask // bingo所有任务 */ //参数校验 func (this *apiComp) CmdCheck(session comm.IUserSession, req *pb.GMCmdReq) (code pb.ErrorCode) { diff --git a/modules/gm/module.go b/modules/gm/module.go index d57a15b8d..9245bbaff 100644 --- a/modules/gm/module.go +++ b/modules/gm/module.go @@ -244,6 +244,16 @@ func (this *GM) CreateCmd(session comm.IUserSession, cmd string) (code pb.ErrorC } module1.(comm.ISociaty).BingoSetActivity(session, int32(num)) this.Debug("使用bingo命令:uid = %s ", log.Fields{"uid": session.GetUserId(), "0": datas[1]}) + } else if len(datas) == 1 && (datas[0] == "alltask") { // 设置工会活跃度 + module, err := this.service.GetModule(comm.ModuleWorldtask) + if err != nil { + return + } + if wt, ok := module.(comm.IWorldtask); ok { + if err = wt.BingoAllTask(session); err != nil { + this.Error("bingo 世界任务", log.Fields{"params": datas, "err": err.Error()}) + } + } } } diff --git a/stress/robot/robot.go b/stress/robot/robot.go index 2fb8e522f..7e9a418aa 100644 --- a/stress/robot/robot.go +++ b/stress/robot/robot.go @@ -57,7 +57,7 @@ func NewRobot(url string) *Robot { } r := &Robot{ ws: ws, - sid: "dfmxf", + sid: "df01", } r.account = r.RandStr1(13) return r @@ -234,7 +234,8 @@ func (r *Robot) GetMessagedata() (data []byte, err error) { } return data, err } -func (r *Robot) Login() error { +func (r *Robot) Login() int64 { + var byteLen int64 msg := &pb.UserMessage{MainType: "user", SubType: "login"} rsp := &pb.UserLoginReq{ Account: "user001", @@ -243,9 +244,36 @@ func (r *Robot) Login() error { msg.Sec = r.BuildSecStr() if comm.ProtoMarshal(rsp, msg) { data, _ := proto.Marshal(msg) - return r.ws.WriteMessage(websocket.BinaryMessage, data) + r.ws.WriteMessage(websocket.BinaryMessage, data) } - return nil + for { + var msg *pb.UserMessage = &pb.UserMessage{} + _, data, err := r.ws.ReadMessage() + if err != nil { + fmt.Printf("readMessage err:%v", err) + continue + } + + if err = proto.Unmarshal(data, msg); err != nil { + fmt.Printf("unmarshal err:%v", err) + } + if msg.MainType == "user" && msg.SubType == "login" { + byteLen += int64(len(data)) + resp := &pb.UserLoginResp{} + if !comm.ProtoUnmarshal(msg, resp) { //反序列化失败 + break + } + break + } else if msg.MainType == "notify" && msg.SubType == "errornotify" { + + rsp := &pb.NotifyErrorNotifyPush{} + if !comm.ProtoUnmarshal(msg, rsp) { // 记录错误码 + byteLen = 0 + break + } + } + } + return byteLen } func (r Robot) GetRandUser() bool { @@ -272,7 +300,8 @@ func (r Robot) GetRandUser() bool { } //return true } -func (r *Robot) Create() bool { +func (r *Robot) Create() int64 { + var byteLen int64 mainType := "user" subType := "create" msg := &pb.UserMessage{MainType: mainType, SubType: subType} @@ -294,12 +323,34 @@ func (r *Robot) Create() bool { } } - for { // 防止丢包 - if b, _ := r.MessageRsp(mainType, subType); b { - return true + for { + var msg *pb.UserMessage = &pb.UserMessage{} + _, data, err := r.ws.ReadMessage() + if err != nil { + fmt.Printf("readMessage err:%v", err) + continue + } + + if err = proto.Unmarshal(data, msg); err != nil { + fmt.Printf("unmarshal err:%v", err) + } + if msg.MainType == "user" && msg.SubType == "create" { + byteLen += int64(len(data)) + resp := &pb.UserCreateResp{} + if !comm.ProtoUnmarshal(msg, resp) { //反序列化失败 + break + } + break + } else if msg.MainType == "notify" && msg.SubType == "errornotify" { + + rsp := &pb.NotifyErrorNotifyPush{} + if !comm.ProtoUnmarshal(msg, rsp) { // 记录错误码 + byteLen = 0 + break + } } } - //return false + return byteLen } // 获取美食家信息列表数据 diff --git a/stress/server/dispose.go b/stress/server/dispose.go index 344ff7fda..a421b1c7e 100644 --- a/stress/server/dispose.go +++ b/stress/server/dispose.go @@ -4,7 +4,6 @@ package server import ( "context" "fmt" - "go_dreamfactory/pb" "go_dreamfactory/stress/model" "go_dreamfactory/stress/robot" "strconv" @@ -55,11 +54,13 @@ func Dispose(ctx context.Context, concurrency, totalNumber uint64, request *mode case 1: // 连接以后再启动协程 r := robot.NewRobot(request.URL) - r.SetAccount("00000" + strconv.Itoa(int(i))) - head := &pb.UserMessage{MainType: "user", SubType: "login"} + r.SetAccount("21112" + strconv.Itoa(int(i))) + //head := &pb.UserMessage{MainType: "user", SubType: "login"} + // 先登录 - r.SendToClient(head, &pb.UserLoginReq{}) + //r.SendToClient(head, &pb.UserLoginReq{}) //r.AddGrormetItem() + //r.Create() go golink.WebSocket(ctx, i, ch, totalNumber, &wg, request, r) case 2: // 并发建立长链接 diff --git a/stress/server/golink/websocket_link.go b/stress/server/golink/websocket_link.go index b8fdcf58c..e65113a04 100644 --- a/stress/server/golink/websocket_link.go +++ b/stress/server/golink/websocket_link.go @@ -22,7 +22,7 @@ var ( ) func init() { - keepAlive = true + keepAlive = false } // WebSocket webSocket go link @@ -76,16 +76,26 @@ func webSocketRequest(chanID uint64, ch chan<- *model.RequestResults, i uint64, ) startTime := time.Now() + isSucceed = true //r.Create() //isSucceed = r.AddGrormetItem() + byteLen = r.Login() + if byteLen == 0 { + isSucceed = false + } else { + byteLen += r.Create() + } + if byteLen == 0 { + isSucceed = false + } //startTime := time.Now() // r.GetRandUser() // 获取随机在线玩家数据 - - byteLen = r.GourmetOrder() - if byteLen > 0 { - isSucceed = true - } + //r.GetGourmetList() + //byteLen = r.GourmetOrder() + // if byteLen > 0 { + // isSucceed = true + // } // for { // var msg *pb.UserMessage = &pb.UserMessage{} // data, err := r.GetMessagedata() diff --git a/stress/server/statistics/statistics.go b/stress/server/statistics/statistics.go index 9861fc0ac..a8f6f08c6 100644 --- a/stress/server/statistics/statistics.go +++ b/stress/server/statistics/statistics.go @@ -192,7 +192,7 @@ func calculateData(concurrent, processingTime, requestTime, maxTime, minTime, su // 纳秒=>毫秒 maxTimeFloat = float64(maxTime) / 1e6 minTimeFloat = float64(minTime) / 1e6 - requestTimeFloat = float64(curTime) / 1e6 // float64(requestTime) / 1e9 + requestTimeFloat = float64(requestTime) / 1e9 // float64(curTime) / 1e6 // // 打印的时长都为毫秒 table(successNum, failureNum, errCode, qps, averageTime, maxTimeFloat, minTimeFloat, requestTimeFloat, chanIDLen, receivedBytes) @@ -233,7 +233,7 @@ func table(successNum, failureNum uint64, errCode *sync.Map, speedStr = p.Sprintf("%d", speed) } // 打印的时长都为毫秒 - result := fmt.Sprintf("%4.0fms│%7d│%7d│%7d│%8.2f│%8.2f│%8.2f│%8.2f│%8s│%8s│%v", + result := fmt.Sprintf("%4.0fs│%7d│%7d│%7d│%8.2f│%8.2f│%8.2f│%8.2f│%8s│%8s│%v", requestTimeFloat, chanIDLen, successNum, failureNum, qps, maxTimeFloat, minTimeFloat, averageTime, receivedBytesStr, speedStr, printMap(errCode)) diff --git a/stress/stress.go b/stress/stress.go index 2a2121ce9..f31777b12 100644 --- a/stress/stress.go +++ b/stress/stress.go @@ -9,6 +9,7 @@ import ( "go_dreamfactory/stress/model" "go_dreamfactory/stress/server" "go_dreamfactory/stress/server/statistics" + "runtime" "strings" "time" ) @@ -75,14 +76,14 @@ type Options struct { //go:generate go build main.go func main() { - //runtime.GOMAXPROCS(cpuNumber) + runtime.GOMAXPROCS(cpuNumber) flag.Parse() statistics.InitLog() - concurrency = 10 + concurrency = 1000 totalNumber = 1 debugStr = "false" - requestURL = "ws://10.0.0.85:7891/gateway" + requestURL = "ws://106.54.189.74:7891/gateway" verify = "pb" if concurrency == 0 || totalNumber == 0 || (requestURL == "" && path == "") { fmt.Printf("示例: go run main.go -c 1 -n 1 -u https://www.baidu.com/ \n")