// Package golink 连接 package golink import ( "context" "sync" "time" "go_dreamfactory/pb" "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 = 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 } return } // webSocketRequest 请求 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 ) // 需要发送的数据 head := &pb.UserMessage{MainType: "user", SubType: "login"} req := &pb.UserLoginReq{ Account: "user001", Sid: "dfmxf", } r.SendToClient(head, req) r.MessageRsp() // err := ws.Write([]byte(`{"seq":"` + seq + `","cmd":"ping","data":{}}`)) // if err != nil { // errCode = model.RequestErr // 请求错误 // } else { // msg, err = ws.Read() // if err != nil { // errCode = model.ParseError // fmt.Println("读取数据 失败~") // } else { // errCode, isSucceed = request.GetVerifyWebSocket()(request, seq, msg) // } // } requestTime := uint64(helper.DiffNano(startTime)) requestResults := &model.RequestResults{ Time: requestTime, IsSucceed: isSucceed, ErrCode: errCode, } requestResults.SetID(chanID, i) ch <- requestResults }