// Package golink 连接 package golink import ( "context" "sync" "time" "go_dreamfactory/stress/helper" "go_dreamfactory/stress/model" "go_dreamfactory/stress/robot" ) const ( firstTime = 1 * time.Second // 连接以后首次请求数据的时间 intervalTime = 1 * time.Second // 发送数据的时间间隔 ) var ( // 请求完成以后是否保持连接 keepAlive bool ) func init() { keepAlive = false } // 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() 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() // 获取随机在线玩家数据 //r.GetGourmetList() //byteLen = r.GourmetOrder() // if byteLen > 0 { // isSucceed = true // } // 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 }