go_dreamfactory/stress/server/golink/websocket_link.go
2022-12-05 19:31:26 +08:00

108 lines
2.2 KiB
Go

// 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 = 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 // 协议传输字节数
)
// 需要发送的数据
head := &pb.UserMessage{MainType: "user", SubType: "login"}
r.SendToClient(head, &pb.UserLoginReq{})
// 美食馆增加道具
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: "",
ChanID: chanID,
Time: requestTime,
IsSucceed: isSucceed,
ErrCode: errCode,
ReceivedBytes: byteLen,
}
requestResults.SetID(chanID, i)
ch <- requestResults
}