From c046fe1b12757d9ab8c4d2d9569022daa31b87bc Mon Sep 17 00:00:00 2001 From: zhaocy Date: Tue, 12 Jul 2022 16:02:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=80=92=E5=BD=92=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/robot/friend.go | 41 +++++++++---- cmd/robot/hero.go | 12 ++-- cmd/robot/linkcase.go | 2 +- cmd/robot/linkcase_test.go | 32 ---------- cmd/robot/login.go | 4 +- cmd/robot/pack.go | 4 +- cmd/robot/robot.go | 43 +++++++------ cmd/robot/task.go | 12 ++-- cmd/robot/user.go | 8 +-- modules/friend/api_addblack.go | 6 +- modules/friend/api_agree.go | 8 +-- modules/friend/api_apply.go | 4 +- modules/friend/api_del.go | 15 ++++- modules/friend/api_delblack.go | 2 +- modules/friend/api_refuse.go | 2 +- modules/friend/model_friend.go | 8 ++- pb/friend_db.pb.go | 10 ++-- pb/proto/friend/friend_db.proto | 2 +- sys/db/benchmark/query_test.go | 103 +++++++++++--------------------- 19 files changed, 143 insertions(+), 175 deletions(-) delete mode 100644 cmd/robot/linkcase_test.go diff --git a/cmd/robot/friend.go b/cmd/robot/friend.go index af4020a95..f6c5be4cb 100644 --- a/cmd/robot/friend.go +++ b/cmd/robot/friend.go @@ -4,21 +4,22 @@ import ( "go_dreamfactory/comm" "go_dreamfactory/modules/friend" "go_dreamfactory/pb" + + "google.golang.org/protobuf/proto" ) var ( //friend friendBuilders = []*TestCase{ { - //list - Desc: "好友列表", + desc: "好友列表", mainType: string(comm.ModuleFriend), subType: friend.FriendSubTypeList, req: &pb.FriendListReq{}, rsp: &pb.FriendListResp{}, // enabled: true, }, { - //blacklist + desc: "黑名单列表", mainType: string(comm.ModuleFriend), subType: friend.FriendSubTypeBlacklist, req: &pb.FriendBlackListReq{}, @@ -34,23 +35,23 @@ var ( rsp: &pb.FriendSearchResp{}, // enabled: true, }, { - //apply + desc: "好友申请", mainType: string(comm.ModuleFriend), subType: friend.FriendSubTypeApply, req: &pb.FriendApplyReq{ - FriendId: "0_62c28ab569b7d416cf9eb8c7", + FriendId: "0_62ccd236e799cee5e7c97930", }, rsp: &pb.FriendApplyResp{}, // enabled: true, }, { - //applylist + desc: "申请列表", mainType: string(comm.ModuleFriend), subType: friend.FriendSubTypeApplyList, req: &pb.FriendApplyListReq{}, rsp: &pb.FriendApplyListResp{}, // enabled: true, }, { - //agree + desc: "同意", mainType: string(comm.ModuleFriend), subType: friend.FriendSubTypeAgree, req: &pb.FriendAgreeReq{ @@ -59,25 +60,39 @@ var ( rsp: &pb.FriendAgreeResp{}, // enabled: true, }, { - //refuse + desc: "拒绝", mainType: string(comm.ModuleFriend), subType: friend.FriendSubTypeRefuse, req: &pb.FriendRefuseReq{ FriendIds: []string{"0_62c28bcb69b7d416cf9eb8c9"}, }, - rsp: &pb.FriendRefuseResp{}, + rsp: &pb.FriendRefuseResp{}, // enabled: true, }, { - //addblack + desc: "添加黑名单", mainType: string(comm.ModuleFriend), subType: friend.FriendSubTypeAddBlack, req: &pb.FriendBlackAddReq{ - FriendId: "0_62c26323e5cc5577d41bf591", + FriendId: "0_62ccd236e799cee5e7c97930", }, rsp: &pb.FriendBlackAddResp{}, // enabled: true, + next: func(rsp proto.Message, handle func(nextCase *TestCase)) { + if r, ok := rsp.(*pb.FriendBlackAddResp); ok { + handle(&TestCase{ + desc: "删除黑名单", + mainType: string(comm.ModuleFriend), + subType: friend.FriendSubTypeDelBlack, + req: &pb.FriendDelBlackReq{ + FriendId: r.FriendId, + }, + rsp: &pb.FriendDelBlackResp{}, + enabled: true, + }) + } + }, }, { - //delblack + desc: "删除黑名单", mainType: string(comm.ModuleFriend), subType: friend.FriendSubTypeDelBlack, req: &pb.FriendDelBlackReq{}, @@ -90,5 +105,5 @@ var ( //声明加入到构建器并发起请求 func (r *Robot) RunFriend() { r.addBuilders(friendBuilders) - r.handleReq() + r.batchHandleReq() } diff --git a/cmd/robot/hero.go b/cmd/robot/hero.go index ae2009830..b1bb966cf 100644 --- a/cmd/robot/hero.go +++ b/cmd/robot/hero.go @@ -13,7 +13,7 @@ var ( //hero heroBuilders = []*TestCase{ { - Desc: "英雄列表", + desc: "英雄列表", mainType: string(comm.ModuleHero), subType: hero.HeroSubTypeList, req: &pb.HeroListReq{}, @@ -24,9 +24,9 @@ var ( fmt.Printf("%d- %v\n", (i + 1), v) } }, - enabled: true, + // enabled: true, }, { - Desc: "英雄详情", + desc: "英雄详情", mainType: string(comm.ModuleHero), subType: hero.HeroSubTypeInfo, req: &pb.HeroInfoReq{ @@ -35,13 +35,13 @@ var ( rsp: &pb.HeroInfoResp{}, // enabled: true, }, { - Desc: "抽卡", + desc: "抽卡", mainType: string(comm.ModuleHero), subType: hero.HeroSubTypeChouka, req: &pb.HeroChoukaReq{ HeroIds: []int32{42911}, }, - rsp: &pb.HeroChoukaResp{}, + rsp: &pb.HeroChoukaResp{}, // enabled: true, }, { mainType: string(comm.ModuleHero), @@ -73,5 +73,5 @@ var ( //声明加入到构建器并发起请求 func (r *Robot) RunHero() { r.addBuilders(heroBuilders) - r.handleReq() + r.batchHandleReq() } diff --git a/cmd/robot/linkcase.go b/cmd/robot/linkcase.go index ef0a3936f..248937fcd 100644 --- a/cmd/robot/linkcase.go +++ b/cmd/robot/linkcase.go @@ -91,5 +91,5 @@ func (this *LinkCase) Insert(index int, testCase *TestCase) { } func (this *CaseNode) String() string { - return fmt.Sprintf("value=%v", this.testCase.Desc) + return fmt.Sprintf("value=%v", this.testCase.desc) } diff --git a/cmd/robot/linkcase_test.go b/cmd/robot/linkcase_test.go deleted file mode 100644 index fc1a98950..000000000 --- a/cmd/robot/linkcase_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package robot_test - -import ( - "fmt" - "go_dreamfactory/cmd/robot" - "sync" - "testing" -) - -func TestJob(t *testing.T) { - // link := robot.NewLinkCase() - link := robot.NewDefault(&robot.TestCase{Desc: "login"}) - link.Append(&robot.TestCase{Desc: "aa"}) - // link.Append(&robot.TestCase{Desc: "bb"}) - - // link.Unshift(&robot.TestCase{Desc: "cc"}) - // link.Unshift(&robot.TestCase{Desc: "dd"}) - - // link.Insert(1, &robot.TestCase{Desc: "ee"}) - cur := link.Head - for cur != nil { - fmt.Println(cur) - cur = cur.Next - } -} - -func TestGJo(t *testing.T) { - var wg sync.WaitGroup - - wg.Add(1) - -} diff --git a/cmd/robot/login.go b/cmd/robot/login.go index e700d5de9..63494f0b2 100644 --- a/cmd/robot/login.go +++ b/cmd/robot/login.go @@ -43,10 +43,10 @@ func (r *Robot) AccountLogin() { Account: r.opts.Account, Sid: r.opts.ServerId, }, - rsp: &pb.UserLoginResp{}, + rsp: &pb.UserLoginResp{}, enabled: true, }, } r.addBuilders(builders) - r.handleReq() + r.batchHandleReq() } diff --git a/cmd/robot/pack.go b/cmd/robot/pack.go index 6b2ac010c..44f6c9d6b 100644 --- a/cmd/robot/pack.go +++ b/cmd/robot/pack.go @@ -12,7 +12,7 @@ var pack_builders = []*TestCase{ mainType: string(comm.ModulePack), subType: "queryuserpackreq", // req: &pb.Pack_Getlist_Req{IType: 1}, - rsp: &pb.UserCreateResp{}, + rsp: &pb.UserCreateResp{}, enabled: true, }, } @@ -20,5 +20,5 @@ var pack_builders = []*TestCase{ //声明加入到构建器并发起请求 func (r *Robot) RunPack() { r.addBuilders(pack_builders) - r.handleReq() + r.batchHandleReq() } diff --git a/cmd/robot/robot.go b/cmd/robot/robot.go index 3efb1dd1f..211274578 100644 --- a/cmd/robot/robot.go +++ b/cmd/robot/robot.go @@ -65,7 +65,7 @@ func (r *Robot) Run() { if err = proto.Unmarshal(data, msg); err != nil { log.Fatal(err) } - r.handleRsp(msg) + r.batchhandleRsp(msg) } }() @@ -74,7 +74,7 @@ func (r *Robot) Run() { } type TestCase struct { - Desc string + desc string mainType string subType string req proto.Message @@ -83,6 +83,7 @@ type TestCase struct { start time.Time requested bool //请求标识 true已发 print func(rsp proto.Message) //定义打印 + next func(rsp proto.Message, handle func(nextCase *TestCase)) } func (r *Robot) addBuilders(builders []*TestCase) { @@ -93,26 +94,30 @@ func (r *Robot) addBuilders(builders []*TestCase) { } } +func (r *Robot) handleReq(b *TestCase) { + b.requested = true + b.start = time.Now() + head := &pb.UserMessage{MainType: b.mainType, SubType: b.subType} + defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), b.req) + err := r.SendToClient(head, b.req) + if err != nil { + log.Fatal(err) + } +} + //执行请求 -func (r *Robot) handleReq() { +func (r *Robot) batchHandleReq() { for _, b := range r.builders { if b.req != nil && !b.requested { r.wg.Add(1) time.Sleep(time.Second * 1) - b.requested = true - b.start = time.Now() - head := &pb.UserMessage{MainType: b.mainType, SubType: b.subType} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), b.req) - err := r.SendToClient(head, b.req) - if err != nil { - log.Fatal(err) - } + r.handleReq(b) } } } //执行响应 -func (r *Robot) handleRsp(msg *pb.UserMessage) { +func (r *Robot) batchhandleRsp(msg *pb.UserMessage) { for i, b := range r.builders { if b.enabled && (msg.MainType == b.mainType && msg.SubType == b.subType) { @@ -122,11 +127,15 @@ func (r *Robot) handleRsp(msg *pb.UserMessage) { if b.print == nil { printReply(msg, b) } else { - fmt.Printf("===== %s [%s.%s] =====\n", b.Desc, msg.MainType, msg.SubType) + fmt.Printf("===== %s [%s.%s] =====\n", b.desc, msg.MainType, msg.SubType) b.print(b.rsp) fmt.Println("==============================") } + if b.next != nil { + b.next(b.rsp, r.handleReq) + } + if msg.MainType == "user" && msg.SubType == "login" { r.loginCallback(b.rsp) } else { @@ -212,7 +221,7 @@ func (r *Robot) AccountRegister(account string, sid int32) { //登录 var user_builders = []*TestCase{ { - Desc: "登录", + desc: "登录", mainType: "user", subType: "login", req: &pb.UserLoginReq{ @@ -224,7 +233,7 @@ func (r *Robot) AccountRegister(account string, sid int32) { }, } r.addBuilders(user_builders) - r.handleReq() + r.batchHandleReq() } } @@ -237,9 +246,9 @@ func printReply(msg *pb.UserMessage, builder *TestCase) { } else { tt = time.Since(builder.start) } - log.Printf("rsp %s [%v] [%s.%s] [%v:%v]", builder.Desc, tt, m.ReqMainType, m.ReqSubType, int32(m.Code), m.Data) + log.Printf("rsp %s [%v] [%s.%s] [%v:%v]", builder.desc, tt, m.ReqMainType, m.ReqSubType, int32(m.Code), m.Data) } else { - log.Printf("rsp %s [%v] [%s.%s] [%v]", builder.Desc, time.Since(builder.start), msg.MainType, msg.SubType, builder.rsp) + log.Printf("rsp %s [%v] [%s.%s] [%v]", builder.desc, time.Since(builder.start), msg.MainType, msg.SubType, builder.rsp) } } diff --git a/cmd/robot/task.go b/cmd/robot/task.go index 34f7d88f0..2a81180ff 100644 --- a/cmd/robot/task.go +++ b/cmd/robot/task.go @@ -13,7 +13,7 @@ var ( taskBuilders = []*TestCase{ { //list - Desc: "任务列表", + desc: "任务列表", mainType: string(comm.ModuleTask), subType: task.TaskSubTypeList, req: &pb.TaskListReq{ @@ -28,7 +28,7 @@ var ( }, // enabled: true, }, { - Desc: "领取任务奖励", + desc: "领取任务奖励", mainType: string(comm.ModuleTask), subType: task.TaskSubTypeReceive, req: &pb.TaskReceiveReq{ @@ -38,7 +38,7 @@ var ( rsp: &pb.TaskReceiveResp{}, // enabled: true, }, { - Desc: "活跃度", + desc: "活跃度", mainType: string(comm.ModuleTask), subType: task.TaskSubTypeActiveList, req: &pb.TaskActiveListReq{ @@ -47,14 +47,14 @@ var ( rsp: &pb.TaskActiveListResp{}, // enabled: true, }, { - Desc: "活跃度领取", + desc: "活跃度领取", mainType: string(comm.ModuleTask), subType: task.TaskSubTypeActiveReceive, req: &pb.TaskActiveReceiveReq{ Id: "62c676d57deea8b9af8884fb", TaskTag: int32(comm.TASK_DAILY), }, - rsp: &pb.TaskActiveReceiveResp{}, + rsp: &pb.TaskActiveReceiveResp{}, // enabled: true, }, } @@ -63,5 +63,5 @@ var ( //声明加入到构建器并发起请求 func (r *Robot) RunTask() { r.addBuilders(taskBuilders) - r.handleReq() + r.batchHandleReq() } diff --git a/cmd/robot/user.go b/cmd/robot/user.go index c714ec514..4fe7ff439 100644 --- a/cmd/robot/user.go +++ b/cmd/robot/user.go @@ -10,7 +10,7 @@ import ( var user_builders = []*TestCase{ { //create - Desc: "创角", + desc: "创角", mainType: string(comm.ModuleUser), subType: user.UserSubTypeCreate, req: &pb.UserCreateReq{ //设置请求参数 @@ -19,13 +19,13 @@ var user_builders = []*TestCase{ rsp: &pb.UserCreateResp{}, // enabled: true, }, { - Desc: "添加资源", + desc: "添加资源", mainType: string(comm.ModuleUser), subType: user.UserSubTypeAddRes, req: &pb.UserAddResReq{ //设置请求参数 Res: &pb.UserAssets{ A: comm.ResGold, - T:"", + T: "", N: 100, }, }, @@ -37,5 +37,5 @@ var user_builders = []*TestCase{ //声明加入到构建器并发起请求 func (r *Robot) RunUser() { r.addBuilders(user_builders) - r.handleReq() + r.batchHandleReq() } diff --git a/modules/friend/api_addblack.go b/modules/friend/api_addblack.go index fe82cfb10..f25ccbbae 100644 --- a/modules/friend/api_addblack.go +++ b/modules/friend/api_addblack.go @@ -20,7 +20,7 @@ func (this *apiComp) Addblack(session comm.IUserSession, req *pb.FriendBlackAddR if code = this.AddblackCheck(session, req); code != pb.ErrorCode_Success { return } - + var ( err error self *pb.DBFriend @@ -61,7 +61,7 @@ func (this *apiComp) Addblack(session comm.IUserSession, req *pb.FriendBlackAddR } // 判断自己是否在对方的黑名单中 - if _, ok := utils.Find(target.BlackIds, self.UId); ok { + if _, ok := utils.Find(target.BlackIds, self.Uid); ok { code = pb.ErrorCode_FriendTargetBlackYet return } @@ -76,7 +76,7 @@ func (this *apiComp) Addblack(session comm.IUserSession, req *pb.FriendBlackAddR self.BlackIds = append(self.BlackIds, req.FriendId) //更新黑名单 - err = this.module.modelFriend.Change(self.UId, map[string]interface{}{ + err = this.module.modelFriend.Change(self.Uid, map[string]interface{}{ "blackIds": self.BlackIds, }) if err != nil { diff --git a/modules/friend/api_agree.go b/modules/friend/api_agree.go index e000fb719..1f1a6a993 100644 --- a/modules/friend/api_agree.go +++ b/modules/friend/api_agree.go @@ -71,13 +71,13 @@ func (this *apiComp) Agree(session comm.IUserSession, req *pb.FriendAgreeReq) (c code = pb.ErrorCode_FriendTargetNoData return } - if _, ok := utils.Find(target.FriendIds, self.UId); !ok { + if _, ok := utils.Find(target.FriendIds, self.Uid); !ok { if target.FriendIds == nil { target.FriendIds = []string{} } - target.FriendIds = append(target.FriendIds, self.UId) + target.FriendIds = append(target.FriendIds, self.Uid) } - err = this.module.modelFriend.Change(target.UId, map[string]interface{}{ + err = this.module.modelFriend.Change(target.Uid, map[string]interface{}{ "friendIds": target.FriendIds, }) if err != nil { @@ -90,7 +90,7 @@ func (this *apiComp) Agree(session comm.IUserSession, req *pb.FriendAgreeReq) (c } //更新 - err = this.module.modelFriend.Change(self.UId, map[string]interface{}{ + err = this.module.modelFriend.Change(self.Uid, map[string]interface{}{ "applyIds": self.ApplyIds, "friendIds": self.FriendIds, }) diff --git a/modules/friend/api_apply.go b/modules/friend/api_apply.go index 2820b4fc2..87e28a8d2 100644 --- a/modules/friend/api_apply.go +++ b/modules/friend/api_apply.go @@ -86,7 +86,7 @@ func (this *apiComp) Apply(session comm.IUserSession, req *pb.FriendApplyReq) (c } //判断自己是否在目标用户的申请列表中 - if _, ok := utils.Find(target.ApplyIds, self.UId); ok { + if _, ok := utils.Find(target.ApplyIds, self.Uid); ok { code = pb.ErrorCode_FriendApplyYet return } @@ -98,7 +98,7 @@ func (this *apiComp) Apply(session comm.IUserSession, req *pb.FriendApplyReq) (c } //判断是否在对方的黑名单中 - if _, ok := utils.Find(target.BlackIds, self.UId); ok { + if _, ok := utils.Find(target.BlackIds, self.Uid); ok { code = pb.ErrorCode_FriendTargetBlackYet return } diff --git a/modules/friend/api_del.go b/modules/friend/api_del.go index 5b51be879..aa81bbb0c 100644 --- a/modules/friend/api_del.go +++ b/modules/friend/api_del.go @@ -3,13 +3,22 @@ package friend import ( "go_dreamfactory/comm" "go_dreamfactory/pb" + + "google.golang.org/protobuf/proto" ) -func (this *apiComp) DelCheck(session comm.IUserSession, req *pb.FriendDelReq) (chk map[string]interface{}, code comm.ErrorCode) { +func (this *apiComp) DelCheck(session comm.IUserSession, req *pb.FriendDelReq) (code pb.ErrorCode) { + if req.FriendId == "" { + code = pb.ErrorCode_ReqParameterError + } return } //删除好友 -func (this *apiComp) Del(session comm.IUserSession, chk map[string]interface{}, req *pb.FriendDelReq) error { - return nil +func (this *apiComp) Del(session comm.IUserSession, chk map[string]interface{}, req *pb.FriendDelReq) (code pb.ErrorCode, data proto.Message) { + if code = this.DelCheck(session, req); code != pb.ErrorCode_Success { + return + } + + return } diff --git a/modules/friend/api_delblack.go b/modules/friend/api_delblack.go index d82213416..5e6788707 100644 --- a/modules/friend/api_delblack.go +++ b/modules/friend/api_delblack.go @@ -48,7 +48,7 @@ func (this *apiComp) Delblack(session comm.IUserSession, req *pb.FriendDelBlackR //从黑名单列表中删除目标 self.BlackIds = utils.DeleteString(self.BlackIds, req.FriendId) //更新黑名单 - err = this.module.modelFriend.Change(self.UId, map[string]interface{}{ + err = this.module.modelFriend.Change(self.Uid, map[string]interface{}{ "blackIds": self.BlackIds, }) if err != nil { diff --git a/modules/friend/api_refuse.go b/modules/friend/api_refuse.go index 6cbc48db7..30ac15087 100644 --- a/modules/friend/api_refuse.go +++ b/modules/friend/api_refuse.go @@ -61,7 +61,7 @@ func (this *apiComp) Refuse(session comm.IUserSession, req *pb.FriendRefuseReq) } //更新 if optNum > 0 { - err := this.module.modelFriend.Change(self.UId, map[string]interface{}{ + err := this.module.modelFriend.Change(self.Uid, map[string]interface{}{ "applyIds": self.ApplyIds, }) if err != nil { diff --git a/modules/friend/model_friend.go b/modules/friend/model_friend.go index b5f5465c8..d983c49f2 100644 --- a/modules/friend/model_friend.go +++ b/modules/friend/model_friend.go @@ -8,6 +8,7 @@ import ( "go_dreamfactory/pb" "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" ) const ( @@ -39,9 +40,10 @@ func (this *ModelFriend) Frined_FindCond(nickName string) *pb.DBUser { //查询好友 func (this *ModelFriend) GetFriend(uid string) *pb.DBFriend { - friend := &pb.DBFriend{UId: uid} - if err := this.Get(uid, friend); err != nil { - if err == redis.RedisNil { + friend := &pb.DBFriend{Uid: uid} + err := this.Get(uid, friend) + if err != nil { + if err == redis.RedisNil || err == mongo.ErrNoDocuments { if err := this.Add(uid, friend); err != nil { return nil } diff --git a/pb/friend_db.pb.go b/pb/friend_db.pb.go index 7c020dc96..6d7ff76f6 100644 --- a/pb/friend_db.pb.go +++ b/pb/friend_db.pb.go @@ -25,7 +25,7 @@ type DBFriend struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - UId string `protobuf:"bytes,1,opt,name=uId,proto3" json:"uId" bson:"uId"` //用户ID + Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid" bson:"uid"` //用户ID FriendIds []string `protobuf:"bytes,2,rep,name=friendIds,proto3" json:"friendIds" bson:"friendIds"` //好友ID ApplyIds []string `protobuf:"bytes,3,rep,name=applyIds,proto3" json:"applyIds" bson:"applyIds"` //申请用户ID BlackIds []string `protobuf:"bytes,4,rep,name=blackIds,proto3" json:"blackIds" bson:"blackIds"` //黑名单ID @@ -63,9 +63,9 @@ func (*DBFriend) Descriptor() ([]byte, []int) { return file_friend_friend_db_proto_rawDescGZIP(), []int{0} } -func (x *DBFriend) GetUId() string { +func (x *DBFriend) GetUid() string { if x != nil { - return x.UId + return x.Uid } return "" } @@ -96,8 +96,8 @@ var File_friend_friend_db_proto protoreflect.FileDescriptor var file_friend_friend_db_proto_rawDesc = []byte{ 0x0a, 0x16, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x2f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x72, 0x0a, 0x08, 0x44, 0x42, 0x46, 0x72, - 0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x64, 0x73, diff --git a/pb/proto/friend/friend_db.proto b/pb/proto/friend/friend_db.proto index e4944d2c2..41072cfcc 100644 --- a/pb/proto/friend/friend_db.proto +++ b/pb/proto/friend/friend_db.proto @@ -2,7 +2,7 @@ syntax = "proto3"; option go_package = ".;pb"; message DBFriend { - string uId = 1; //@go_tags(`bson:"uId"`) 用户ID + string uid = 1; //@go_tags(`bson:"uid"`) 用户ID repeated string friendIds = 2; //@go_tags(`bson:"friendIds"`) 好友ID repeated string applyIds = 3; //@go_tags(`bson:"applyIds"`) 申请用户ID repeated string blackIds = 4; //@go_tags(`bson:"blackIds"`) 黑名单ID diff --git a/sys/db/benchmark/query_test.go b/sys/db/benchmark/query_test.go index b9cb055a6..30904ced0 100644 --- a/sys/db/benchmark/query_test.go +++ b/sys/db/benchmark/query_test.go @@ -3,7 +3,6 @@ package bench import ( "context" "fmt" - "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/sys/db" "log" @@ -51,33 +50,31 @@ func TestMain(m *testing.M) { } func BenchmarkMarsh(b *testing.B) { - var ( // ncpu = runtime.NumCPU() parallelisms = []int{2} //平行数 dataSizes = []int{10, 100, 1000} //测试次数 builders = []TargetBuilder{ + // { + // Name: "gen", + // Make: func(bench Benchmark) (Target, error) { + // return Target{ + // GetHeroList: func() (any, error) { + // // heroes := GetList3(new(DBHero)) + // heroes := []*DBHero{} + // GetList(&heroes) + // return heroes, nil + // }, + // }, nil + // }, + // }, { - Name: "gen", - Make: func(bench Benchmark) (Target, error) { - return Target{ - GetHeroList: func() (any, error) { - // heroes := GetList3(new(DBHero)) - heroes := []*DBHero{} - GetList(&heroes) - return heroes, nil - }, - }, nil - }, - }, - { - Name: "reflect", + Name: "Decode", Make: func(bench Benchmark) (Target, error) { return Target{ GetHeroList: func() (interface{}, error) { - heroes := []*DBHero{} - GetListO(&heroes) - return heroes, nil + GetListByDecode() + return nil, nil }, }, nil }, @@ -146,60 +143,27 @@ func GetList(data interface{}) (err error) { return err } -func GetListO(data interface{}) (err error) { - var c *mongo.Cursor - t := reflect.TypeOf(data) - if t.Kind() == reflect.Ptr { - t = t.Elem() +func GetListByDecode() (err error) { + // t2 := time.Now() + c, err := mgoDb.Collection("hero").Find(context.Background(), bson.M{"_id": "62ccd2670af3660e58e1730e"}) + if err != nil { + fmt.Println(err) } + defer c.Close(context.Background()) + // fmt.Println(time.Since(t2)) - if t.Kind() == reflect.Slice { - t = t.Elem() - } else { - err = fmt.Errorf("Input param is not a slice") - } - sl := reflect.ValueOf(data) - if t.Kind() == reflect.Ptr { - sl = sl.Elem() - } - st := sl.Type() - sliceType := st.Elem() - if sliceType.Kind() == reflect.Ptr { - sliceType = sliceType.Elem() - } + // t := time.Now() - //query from mgo - if c, err = mdb.Mgo().Find(core.SqlTable("hero"), bson.M{}); err != nil { - // if c, err = mgoDb.Collection("hreo").Find(context.Background(), bson.M{}); err != nil { - return err - } else { - var temp map[string]interface{} = make(map[string]interface{}) - - for c.Next(context.Background()) { - _id := c.Current.Lookup("_id").StringValue() - if sl.Len() < sl.Cap() { - sl.Set(sl.Slice(0, sl.Len()+1)) - elem := sl.Index(sl.Len() - 1) - if elem.IsNil() { - elem.Set(reflect.New(sliceType)) - } - if err = c.Decode(elem.Elem().Addr().Interface()); err != nil { - return - } - temp[_id] = elem.Elem().Addr().Interface() - continue - } - elem := reflect.New(sliceType) - sl.Set(reflect.Append(sl, elem)) - if err = c.Decode(elem.Elem().Addr().Interface()); err != nil { - return - } - temp[_id] = elem.Elem().Addr().Interface() - } - if len(temp) == 0 { //没有数据自己返回 - return + for c.Next(context.Background()) { + // go func(c1 *mongo.Cursor) { + var hero *DBHero + err2 := c.Decode(&hero) + if err2 != nil { + fmt.Println(err2) } + // }(c) } + // fmt.Printf("%v ", time.Since(t)) return err } @@ -270,7 +234,8 @@ func BenchmarkSimple(b *testing.B) { // f, _ := os.Create("c://pprof2") // pprof.WriteHeapProfile(f) // defer f.Close() + for i := 0; i < b.N; i++ { - GetList4(new(DBHero)) + GetListByDecode() } }