Merge branch 'dev' of http://git.legu.cc/liwei_3d/go_dreamfactory into dev
This commit is contained in:
commit
758acdce06
@ -7,3 +7,4 @@ go build -o ./bin/cmd.exe ./services/cmd/main.go
|
||||
go build -o ./bin/mainte.exe ./services/mainte/main.go
|
||||
go build -o ./bin/gateway.exe ./services/gateway/main.go
|
||||
go build -o ./bin/worker.exe ./services/worker/main.go
|
||||
go build -o ./bin/robot.exe ./services/robot/main.go
|
29
bin/robot.txt
Normal file
29
bin/robot.txt
Normal file
@ -0,0 +1,29 @@
|
||||
机器人总数: 1
|
||||
成功数量: 1
|
||||
失败数量: 0
|
||||
消息总吞吐量: 128
|
||||
---消息压测详情----------------------------------------------------------------------------------------------------
|
||||
消息名:hero.talentlist 请求次数:1 耗时最小:18 ms 耗时最大:18 ms 平均耗时:18.00ms 中位耗时:18.00ms
|
||||
消息名:gm.cmd 请求次数:2 耗时最小:0 ms 耗时最大:29 ms 平均耗时:14.50ms 中位耗时:14.50ms
|
||||
消息名:wtask.info 请求次数:1 耗时最小:40 ms 耗时最大:40 ms 平均耗时:40.00ms 中位耗时:40.00ms
|
||||
消息名:wtask.finish 请求次数:16 耗时最小:34 ms 耗时最大:73 ms 平均耗时:45.38ms 中位耗时:43.00ms
|
||||
消息名:wtask.battlefinish 请求次数:7 耗时最小:18 ms 耗时最大:109 ms 平均耗时:62.29ms 中位耗时:46.00ms
|
||||
消息名:practice.info 请求次数:2 耗时最小:19 ms 耗时最大:30 ms 平均耗时:24.50ms 中位耗时:24.50ms
|
||||
消息名:sys.funcactivate 请求次数:2 耗时最小:16 ms 耗时最大:19 ms 平均耗时:17.50ms 中位耗时:17.50ms
|
||||
消息名:user.create 请求次数:1 耗时最小:87 ms 耗时最大:87 ms 平均耗时:87.00ms 中位耗时:87.00ms
|
||||
消息名:mainline.info 请求次数:13 耗时最小:22 ms 耗时最大:32 ms 平均耗时:24.23ms 中位耗时:24.00ms
|
||||
消息名:mainline.levelpass 请求次数:6 耗时最小:22 ms 耗时最大:25 ms 平均耗时:23.83ms 中位耗时:24.00ms
|
||||
消息名:practice.practice 请求次数:1 耗时最小:24 ms 耗时最大:24 ms 平均耗时:24.00ms 中位耗时:24.00ms
|
||||
消息名:wtask.completecondi 请求次数:3 耗时最小:26 ms 耗时最大:28 ms 平均耗时:27.00ms 中位耗时:27.00ms
|
||||
消息名:chat.send 请求次数:10 耗时最小:14 ms 耗时最大:17 ms 平均耗时:15.70ms 中位耗时:15.50ms
|
||||
消息名:shop.getlist 请求次数:10 耗时最小:16 ms 耗时最大:27 ms 平均耗时:19.50ms 中位耗时:19.00ms
|
||||
消息名:wtask.accept 请求次数:17 耗时最小:23 ms 耗时最大:36 ms 平均耗时:27.47ms 中位耗时:27.00ms
|
||||
消息名:sys.funcgetlist 请求次数:1 耗时最小:62 ms 耗时最大:62 ms 平均耗时:62.00ms 中位耗时:62.00ms
|
||||
消息名:hero.list 请求次数:1 耗时最小:29 ms 耗时最大:29 ms 平均耗时:29.00ms 中位耗时:29.00ms
|
||||
消息名:items.getlist 请求次数:1 耗时最小:23 ms 耗时最大:23 ms 平均耗时:23.00ms 中位耗时:23.00ms
|
||||
消息名:hero.drawcard 请求次数:10 耗时最小:50 ms 耗时最大:75 ms 平均耗时:62.90ms 中位耗时:60.00ms
|
||||
消息名:mainline.challenge 请求次数:7 耗时最小:48 ms 耗时最大:51 ms 平均耗时:49.71ms 中位耗时:50.00ms
|
||||
消息名:mainline.challengeover 请求次数:7 耗时最小:82 ms 耗时最大:166 ms 平均耗时:128.86ms 中位耗时:152.00ms
|
||||
消息名:user.login 请求次数:1 耗时最小:764 ms 耗时最大:764 ms 平均耗时:764.00ms 中位耗时:764.00ms
|
||||
消息名:wtask.battlestart 请求次数:7 耗时最小:17 ms 耗时最大:29 ms 平均耗时:23.29ms 中位耗时:23.00ms
|
||||
消息名:equipment.getlist 请求次数:1 耗时最小:19 ms 耗时最大:19 ms 平均耗时:19.00ms 中位耗时:19.00ms
|
@ -84,7 +84,7 @@ func (this *configureComp) GettriggerData(ptypes int32) (result *cfg.GameDreamla
|
||||
} else {
|
||||
if result, ok = v.(*cfg.GameDreamlandTrigger).GetDataMap()[ptypes]; !ok {
|
||||
err = fmt.Errorf("not found:%d ", ptypes)
|
||||
this.module.Errorln(err)
|
||||
// this.module.Errorln(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"go_dreamfactory/pb"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
@ -88,6 +89,7 @@ locp:
|
||||
}
|
||||
func (this *Client) WriteMsg(msg *pb.UserMessage) (err error) {
|
||||
if atomic.LoadInt32(&this.state) != 1 {
|
||||
err = fmt.Errorf("Client state closed !")
|
||||
return
|
||||
}
|
||||
var (
|
||||
|
@ -62,3 +62,10 @@ type MessageResp struct {
|
||||
resp proto.Message
|
||||
errdata *pb.ErrorData
|
||||
}
|
||||
|
||||
type Pipeline struct {
|
||||
Module string //模块名
|
||||
Exenum int32 //执行次数
|
||||
CurrNum int32 //当前已执行次数
|
||||
ErrNotStop bool //遇到错误是否中断
|
||||
}
|
||||
|
@ -28,7 +28,22 @@ func (this *ModuleRobot_Chat) Receive(robot IRobot, stype string, message proto.
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_Chat) DoPipeline(robot IRobot) (err error) {
|
||||
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
usermodule *ModuleRobot_User
|
||||
)
|
||||
usermodule = robot.GetModule(comm.ModuleUser).(*ModuleRobot_User)
|
||||
if _, errdata = robot.SendMessage("chat", "send", &pb.ChatSendReq{
|
||||
Avatar: usermodule.user.Avatar,
|
||||
Uname: usermodule.user.Name,
|
||||
Ulv: usermodule.user.Lv,
|
||||
Channel: pb.ChatChannel_World,
|
||||
Ctype: pb.ChatType_Text,
|
||||
Content: fmt.Sprintf("你好!我是%s", robot.Account()),
|
||||
}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go_dreamfactory/pb"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
@ -23,7 +26,17 @@ func (this *ModuleRobot_GM) Receive(robot IRobot, stype string, message proto.Me
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_GM) DoPipeline(robot IRobot) (err error) {
|
||||
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
if _, errdata = robot.SendMessage("gm", "cmd", &pb.GMCmdReq{Cmod: "bingo:attr,gold,1000000"}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
if _, errdata = robot.SendMessage("gm", "cmd", &pb.GMCmdReq{Cmod: "bingo:attr,diamond,1000000"}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,31 @@ func (this *ModuleRobot_Shop) Receive(robot IRobot, stype string, message proto.
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_Shop) DoPipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
usermodule *ModuleRobot_User
|
||||
)
|
||||
usermodule = robot.GetModule(comm.ModuleUser).(*ModuleRobot_User)
|
||||
if _, errdata = robot.SendMessage("shop", "getlist", &pb.ShopGetListReq{
|
||||
SType: pb.ShopType_DiamondShop,
|
||||
}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
|
||||
for _, v := range this.goods[pb.ShopType_DiamondShop] {
|
||||
if v.LeftBuyNum > 0 && usermodule.user.Diamond >= int64(v.Consume[0].N) {
|
||||
if _, errdata = robot.SendMessage("shop", "buy", &pb.ShopBuyReq{
|
||||
ShopType: pb.ShopType_DiamondShop,
|
||||
Gid: v.Gid,
|
||||
BuyNum: 1,
|
||||
}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@ type (
|
||||
RobotName string //机器人名称
|
||||
RobotStart int32 //机器人初始下标
|
||||
RobotLog bool
|
||||
Pipeline []string //执行流水线
|
||||
Pipeline []Pipeline //执行流水线
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -31,8 +31,10 @@ type Robot struct {
|
||||
curreq string //当前请求
|
||||
await chan *MessageResp
|
||||
modules map[core.M_Modules]IModuleRobot
|
||||
pipeline []string //执行流水线
|
||||
cycle bool
|
||||
pipeline []*Pipeline //执行流水线
|
||||
statistics []*RobotStatistics
|
||||
wtaskerror error
|
||||
}
|
||||
|
||||
func (this *Robot) Account() string {
|
||||
@ -246,11 +248,25 @@ func (this *Robot) run() {
|
||||
module IModuleRobot
|
||||
err error
|
||||
)
|
||||
for _, v := range this.pipeline {
|
||||
module = this.modules[core.M_Modules(v)]
|
||||
if err = module.DoPipeline(this); err != nil {
|
||||
log.Debug("[机器人 执行异常]", log.Field{Key: "Account", Value: this.account}, log.Field{Key: "module", Value: v}, log.Field{Key: "err", Value: err.Error()})
|
||||
break
|
||||
|
||||
for this.cycle {
|
||||
this.cycle = false
|
||||
for _, v := range this.pipeline {
|
||||
if v.CurrNum < v.Exenum {
|
||||
module = this.modules[core.M_Modules(v.Module)]
|
||||
if err = module.DoPipeline(this); err != nil {
|
||||
if this.debug {
|
||||
log.Debug("[机器人 执行异常]", log.Field{Key: "Account", Value: this.account}, log.Field{Key: "module", Value: v}, log.Field{Key: "err", Value: err.Error()})
|
||||
}
|
||||
if !v.ErrNotStop {
|
||||
break
|
||||
}
|
||||
}
|
||||
v.CurrNum++
|
||||
if v.CurrNum < v.Exenum {
|
||||
this.cycle = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.Close()
|
||||
|
@ -65,8 +65,18 @@ func (this *robotmgrComp) createRobot(index int32) {
|
||||
index: index,
|
||||
account: fmt.Sprintf("%s_%d", this.module.options.RobotName, this.module.options.RobotStart+index),
|
||||
serverId: this.module.options.ServerID,
|
||||
pipeline: this.module.options.Pipeline,
|
||||
cycle: true,
|
||||
pipeline: make([]*Pipeline, 0),
|
||||
}
|
||||
|
||||
for _, v := range this.module.options.Pipeline {
|
||||
robot.pipeline = append(robot.pipeline, &Pipeline{
|
||||
Module: v.Module,
|
||||
Exenum: v.Exenum,
|
||||
ErrNotStop: v.ErrNotStop,
|
||||
})
|
||||
}
|
||||
|
||||
if err = robot.Init(this.module.options.ServerAddr, robot); err != nil {
|
||||
this.module.statisticalComp.AddFailClient(robot, err)
|
||||
return
|
||||
|
@ -52,6 +52,7 @@ func (this *statisticalComp) RobotFinishedTest(robot *Robot) {
|
||||
if this.endClientnum >= this.module.options.RobotTotalNum { //压测结束
|
||||
this.OutReport()
|
||||
}
|
||||
log.Debugf("完成测试:%s", robot.account)
|
||||
}
|
||||
|
||||
//输出报表
|
||||
|
@ -19,8 +19,9 @@ func (this *apiComp) FuncActivate(session comm.IUserSession, req *pb.SysFuncActi
|
||||
if opencfg != nil {
|
||||
if id := this.module.modelSys.validCond(session.GetUserId(), opencfg); id == "" { // 条件不满足
|
||||
errdata = &pb.ErrorData{
|
||||
Code: pb.ErrorCode_OpenCondErr,
|
||||
Title: pb.ErrorCode_OpenCondErr.ToString(),
|
||||
Code: pb.ErrorCode_OpenCondErr,
|
||||
Title: pb.ErrorCode_OpenCondErr.ToString(),
|
||||
Message: req.Cid,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user