diff --git a/stress/robot/robot.go b/stress/robot/robot.go index 3b61fb6c3..6d3a04f8e 100644 --- a/stress/robot/robot.go +++ b/stress/robot/robot.go @@ -2,16 +2,15 @@ package robot import ( "bytes" - "crypto/rand" "encoding/json" "fmt" "go_dreamfactory/comm" + "go_dreamfactory/pb" "io" - "math/big" + "math/rand" "os" "strconv" - - "go_dreamfactory/pb" + "time" "github.com/gorilla/websocket" "github.com/sirupsen/logrus" @@ -203,6 +202,13 @@ func (r *Robot) MessageRsp(mainType, subType string) (bool, int64) { return false, byteLen } //fmt.Printf("接收消息=====loginData:%v,userExpand:%v\n", resp.Data, resp.Ex) + return true, byteLen + } else if msg.MainType == "goutmet" && msg.SubType == "getranduser" { + resp := &pb.GourmetGetRandUserResp{} + if !comm.ProtoUnmarshal(msg, resp) { + return false, byteLen + } + return true, byteLen } return false, byteLen @@ -235,13 +241,38 @@ func (r *Robot) Login() error { return nil } +func (r Robot) GetRandUser() bool { + mainType := "goutmet" + subType := "getlist" + msg := &pb.UserMessage{MainType: mainType, SubType: subType} + + rsp := &pb.GourmetGetRandUserReq{ + People: 3, + } + msg.Sec = r.BuildSecStr() + if comm.ProtoMarshal(rsp, msg) { + data, _ := proto.Marshal(msg) + err := r.ws.WriteMessage(websocket.BinaryMessage, data) + if err != nil { + fmt.Printf("WriteMessage err:%v", err) + } + } + + for i := 0; i < 100; i++ { + if b, _ := r.MessageRsp(mainType, subType); b { + return true + } + } + return true +} func (r *Robot) Create() bool { mainType := "user" subType := "create" msg := &pb.UserMessage{MainType: mainType, SubType: subType} - n2, _ := rand.Int(rand.Reader, big.NewInt(1000000)) + rand.Seed(time.Now().UnixNano()) + n2 := rand.Int63n(9000000) - name := strconv.Itoa(int(n2.Int64() + 100000)) + name := strconv.Itoa(int(n2) + 100000) rsp := &pb.UserCreateReq{ NickName: name, Figure: 100, @@ -256,10 +287,70 @@ func (r *Robot) Create() bool { } } - for { + for i := 0; i < 100; i++ { // 防止丢包 if b, _ := r.MessageRsp(mainType, subType); b { return true } } - + return false +} + +// 获取美食家信息列表数据 +func (r Robot) GetGourmetList() int64 { + var byteLen int64 + mainType := "goutmet" + subType := "getranduser" + msg := &pb.UserMessage{MainType: mainType, SubType: subType} + + rsp := &pb.GourmetGetRandUserReq{ + People: 3, + } + msg.Sec = r.BuildSecStr() + if comm.ProtoMarshal(rsp, msg) { + data, _ := proto.Marshal(msg) + err := r.ws.WriteMessage(websocket.BinaryMessage, data) + if err != nil { + fmt.Printf("WriteMessage err:%v", err) + } + } + + for i := 0; i < 100; i++ { + var msg *pb.UserMessage = &pb.UserMessage{} + _, data, err := r.ws.ReadMessage() + if err != nil { + fmt.Printf("readMessage err:%v", err) + continue + } + byteLen += int64(len(data)) + if err = proto.Unmarshal(data, msg); err != nil { + fmt.Printf("unmarshal err:%v", err) + } + if msg.MainType == "goutmet" && msg.SubType == "getlist" { + resp := &pb.GourmetGetListResp{} + if !comm.ProtoUnmarshal(msg, resp) { //反序列化失败 + break + } + break + } + } + return byteLen +} + +// addItem +func (r Robot) AddGrormetItem() { + mainType := "gm" + subType := "cmd" + msg := &pb.UserMessage{MainType: mainType, SubType: subType} + + rsp := &pb.GMCmdReq{ + Cmod: "bingo:item,50001,100", + } + msg.Sec = r.BuildSecStr() + if comm.ProtoMarshal(rsp, msg) { + data, _ := proto.Marshal(msg) + err := r.ws.WriteMessage(websocket.BinaryMessage, data) + if err != nil { + fmt.Printf("WriteMessage err:%v", err) + } + } } diff --git a/stress/server/golink/websocket_link.go b/stress/server/golink/websocket_link.go index 149aca499..a06f86093 100644 --- a/stress/server/golink/websocket_link.go +++ b/stress/server/golink/websocket_link.go @@ -71,7 +71,6 @@ end: func webSocketRequest(chanID uint64, ch chan<- *model.RequestResults, i uint64, request *model.Request, r *robot.Robot) { var ( - startTime = time.Now() isSucceed = false errCode = model.HTTPOk byteLen int64 // 协议传输字节数 @@ -80,16 +79,20 @@ func webSocketRequest(chanID uint64, ch chan<- *model.RequestResults, i uint64, head := &pb.UserMessage{MainType: "user", SubType: "login"} r.SendToClient(head, &pb.UserLoginReq{}) - for { - - if b, len := r.MessageRsp("user", "login"); b { - byteLen += len - isSucceed = true - //errCode, isSucceed = request.GetVerifyWebSocket()(request, "webSocket.pb", r.GetMessagedata()) - break - } - } - r.Create() + // 美食馆增加道具 + r.AddGrormetItem() + // for { + // if b, len := r.MessageRsp("user", "login"); b { + // byteLen += len + // isSucceed = true + // //errCode, isSucceed = request.GetVerifyWebSocket()(request, "webSocket.pb", r.GetMessagedata()) + // break + // } + // } + // r.Create() + startTime := time.Now() + // r.GetRandUser() // 获取随机在线玩家数据 + byteLen = r.GetGourmetList() requestTime := uint64(helper.DiffNano(startTime)) requestResults := &model.RequestResults{ ID: "",