// Package golink 连接 package golink import ( "context" "fmt" "sync" "time" "go_dreamfactory/comm" "go_dreamfactory/pb" "go_dreamfactory/stress/helper" "go_dreamfactory/stress/model" "go_dreamfactory/stress/robot" "github.com/golang/protobuf/proto" ) const ( firstTime = 1 * time.Second // 连接以后首次请求数据的时间 intervalTime = 1 * time.Second // 发送数据的时间间隔 ) var ( // 请求完成以后是否保持连接 keepAlive bool ) func init() { keepAlive = true } // WebSocket webSocket go link func WebSocket(ctx context.Context, chanID uint64, ch chan<- *model.RequestResults, totalNumber uint64, wg *sync.WaitGroup, request *model.Request, r *robot.Robot) { defer func() { wg.Done() }() defer func() { r.CloseHandler() }() var ( i uint64 ) // 暂停60秒 t := time.NewTimer(firstTime) for { select { case <-t.C: t.Reset(intervalTime) // 请求 webSocketRequest(chanID, ch, i, request, r) // 结束条件 i = i + 1 if i >= totalNumber { goto end } } } end: t.Stop() if keepAlive { // 保持连接 chWaitFor := make(chan int, 0) <-chWaitFor //time.Sleep(15 * time.Millisecond) //return } return } // webSocketRequest 请求 func webSocketRequest(chanID uint64, ch chan<- *model.RequestResults, i uint64, request *model.Request, r *robot.Robot) { var ( isSucceed = false errCode = model.HTTPOk byteLen int64 // 协议传输字节数 ) startTime := time.Now() //r.Create() //isSucceed = r.AddGrormetItem() //startTime := time.Now() // r.GetRandUser() // 获取随机在线玩家数据 r.GetGourmetList() for { var msg *pb.UserMessage = &pb.UserMessage{} data, err := r.GetMessagedata() if err != nil { fmt.Printf("readMessage err:%v", err) isSucceed = false break } if err = proto.Unmarshal(data, msg); err != nil { fmt.Printf("unmarshal err:%v", err) } if msg.MainType == "gourmet" && msg.SubType == "getlist" { byteLen += int64(len(data)) isSucceed = true resp := &pb.GourmetGetListResp{} if !comm.ProtoUnmarshal(msg, resp) { //反序列化失败 break } break } } requestTime := uint64(helper.DiffNano(startTime)) requestResults := &model.RequestResults{ ID: "", ChanID: chanID, Time: requestTime, IsSucceed: isSucceed, ErrCode: errCode, ReceivedBytes: byteLen, } requestResults.SetID(chanID, i) ch <- requestResults }