main.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. jsoniter "github.com/json-iterator/go"
  6. mhayaHttp "github.com/mhaya/extend/http"
  7. "github.com/mhaya/game/game_cluster/internal/code"
  8. "github.com/mhaya/game/game_cluster/internal/param"
  9. mhayaLogger "github.com/mhaya/logger"
  10. "strconv"
  11. )
  12. func main() {
  13. // 定义命令行标志
  14. userOffset := flag.Int("userOffset", 0, "用户偏移量")
  15. count := flag.Int("count", 50000, "请求总数")
  16. flag.Int("qps", 2000, "最大并发数")
  17. url := flag.String("url", "", "请求url")
  18. flag.Int("duration", 120, "测试持续时间")
  19. flag.Parse()
  20. //startTime := time.Now()
  21. //var wg sync.WaitGroup
  22. //wg.Add(*count)
  23. // 创建一个 channel 来控制请求的速率
  24. //reqCh := make(chan struct{}, *qps)
  25. //// 控制请求速率的 goroutine
  26. //go func() {
  27. // ticker := time.NewTicker(time.Second / time.Duration(*qps))
  28. // defer ticker.Stop()
  29. // for range ticker.C {
  30. // reqCh <- struct{}{}
  31. // }
  32. //}()
  33. // 发送请求的 goroutine
  34. //go func() {
  35. for i := *userOffset; i < *count; i++ {
  36. //<-reqCh
  37. //go func() {
  38. // defer wg.Done()
  39. str := strconv.Itoa(i)
  40. account := &param.LoginReq{
  41. Pid: 2,
  42. OpenID: str,
  43. Platform: "ios",
  44. Channel: "tg",
  45. }
  46. RunRobot(*url, account, i)
  47. //}()
  48. }
  49. //}()
  50. // 等待所有请求完成
  51. //wg.Wait()
  52. fmt.Println("All goroutines have finished.")
  53. //qpsAchieved := float64(*count) / time.Since(startTime).Seconds()
  54. }
  55. func RunRobot(url string, val *param.LoginReq, num int) {
  56. fmt.Println("start goroutines i:%v", num)
  57. token := RegisterDevAccount(url, val)
  58. if token == "" {
  59. return
  60. }
  61. params := map[string]interface{}{
  62. "nickName": "guest" + val.OpenID,
  63. }
  64. Login(url, params, token)
  65. start(val, token, url)
  66. //singInList(val, token, url)
  67. //singIn(val, token,url)
  68. }
  69. func RegisterDevAccount(url string, val *param.LoginReq) string {
  70. requestURL := fmt.Sprintf("%s/auth", url)
  71. params := map[string]interface{}{
  72. "pid": val.Pid,
  73. "openid": val.OpenID,
  74. "platform": val.Platform,
  75. "channel": val.Channel,
  76. }
  77. jsonBytes, _, err := mhayaHttp.PostJSON(requestURL, params)
  78. if err != nil {
  79. mhayaLogger.Warn(err)
  80. return ""
  81. }
  82. rsp := &code.Result{}
  83. err = jsoniter.Unmarshal(jsonBytes, rsp)
  84. if err != nil {
  85. mhayaLogger.Warn(err)
  86. return ""
  87. }
  88. if rsp.Code == 0 {
  89. mhayaLogger.Debugf("register account = %v, result = %v", val.OpenID, rsp)
  90. return rsp.Data.(string)
  91. }
  92. return ""
  93. }
  94. func start(val *param.LoginReq, token string, url string) {
  95. requestURL := fmt.Sprintf("%s/start", url)
  96. params := map[string]interface{}{
  97. "pid": val.Pid,
  98. "openId": val.OpenID,
  99. }
  100. execute("start", requestURL, params, token)
  101. }
  102. func singInList(val *param.LoginReq, token string, url string) {
  103. requestURL := fmt.Sprintf("%s/signInList", url)
  104. params := map[string]interface{}{}
  105. execute("signInList", requestURL, params, token)
  106. }
  107. func singIn(val *param.LoginReq, token string, url string) {
  108. requestURL := fmt.Sprintf("%s/signIn", url)
  109. params := map[string]interface{}{}
  110. execute("signIn", requestURL, params, token)
  111. }
  112. func rank(val *param.LoginReq, token string, url string) {
  113. requestURL := fmt.Sprintf("%s/rank", url)
  114. params := map[string]interface{}{
  115. "id": 1,
  116. "tp": 1,
  117. }
  118. execute("rank", requestURL, params, token)
  119. }
  120. func inviteRewardRatio(val *param.LoginReq, token string, url string) {
  121. requestURL := fmt.Sprintf("%s/inviteRewardRatio", url)
  122. params := map[string]interface{}{}
  123. execute("inviteRewardRatio", requestURL, params, token)
  124. }
  125. func inviteNodeReward(val *param.LoginReq, token string, url string) {
  126. requestURL := fmt.Sprintf("%s/inviteNodeReward", url)
  127. params := map[string]interface{}{}
  128. execute("inviteNodeReward", requestURL, params, token)
  129. }
  130. func itemWeekRecord(val *param.LoginReq, token string, url string) {
  131. requestURL := fmt.Sprintf("%s/itemWeekRecord", url)
  132. params := map[string]interface{}{}
  133. execute("itemWeekRecord", requestURL, params, token)
  134. }
  135. func inviteRewardRatioHistory(val *param.LoginReq, token string, url string) {
  136. requestURL := fmt.Sprintf("%s/inviteRewardRatioHistory", url)
  137. params := map[string]interface{}{}
  138. execute("inviteRewardRatioHistory", requestURL, params, token)
  139. }
  140. func countryRank(val *param.LoginReq, token string, url string) {
  141. requestURL := fmt.Sprintf("%s/countryRank", url)
  142. params := map[string]interface{}{}
  143. execute("countryRank", requestURL, params, token)
  144. }
  145. func claim(val *param.LoginReq, token string, url string) {
  146. requestURL := fmt.Sprintf("%s/claim", url)
  147. params := map[string]interface{}{}
  148. execute("claim", requestURL, params, token)
  149. }
  150. func Login(url string, params map[string]interface{}, token string) {
  151. requestURL := fmt.Sprintf("%s/login", url)
  152. jsonBytes, err := mhayaHttp.PostJSONWithHeader(requestURL, params, token)
  153. if err != nil {
  154. mhayaLogger.Warn(err)
  155. return
  156. }
  157. rsp := &code.Result{}
  158. err = jsoniter.Unmarshal(jsonBytes, rsp)
  159. if err != nil {
  160. mhayaLogger.Warn(err)
  161. return
  162. }
  163. mhayaLogger.Debugf("Login OK")
  164. }
  165. func execute(handler string, url string, params map[string]interface{}, token string) {
  166. //requestURL := fmt.Sprintf("%s/start", url)
  167. jsonBytes, err := mhayaHttp.PostJSONWithHeader(url, params, token)
  168. if err != nil {
  169. mhayaLogger.Warn(err)
  170. return
  171. }
  172. rsp := &code.Result{}
  173. err = jsoniter.Unmarshal(jsonBytes, rsp)
  174. if err != nil {
  175. mhayaLogger.Warn(err)
  176. return
  177. }
  178. mhayaLogger.Debugf("%s parms =%v", handler, params)
  179. mhayaLogger.Debugf("%s rsp =%v", handler, rsp)
  180. }
  181. func Invite(url string, params map[string]interface{}, token string) {
  182. requestURL := fmt.Sprintf("%s/invite", url)
  183. jsonBytes, err := mhayaHttp.PostJSONWithHeader(requestURL, params, token)
  184. if err != nil {
  185. mhayaLogger.Warn(err)
  186. return
  187. }
  188. rsp := &code.Result{}
  189. err = jsoniter.Unmarshal(jsonBytes, rsp)
  190. if err != nil {
  191. mhayaLogger.Warn(err)
  192. return
  193. }
  194. mhayaLogger.Debugf("Invite %v", params)
  195. }
  196. //func RunRobot1(url, pid, userName, password, addr string, serverId int32, printLog bool) *Robot {
  197. // // 创建客户端
  198. // cli := New(
  199. // pomeloClient.New(
  200. // pomeloClient.WithRequestTimeout(10*time.Second),
  201. // pomeloClient.WithErrorBreak(true),
  202. // ),
  203. // )
  204. // cli.PrintLog = printLog
  205. //
  206. // // 登录获取token
  207. // if err := cli.GetToken(url, pid, userName, password); err != nil {
  208. // mhayaLogger.Error(err)
  209. // return nil
  210. // }
  211. //
  212. // // 根据地址连接网关
  213. // if err := cli.ConnectToTCP(addr); err != nil {
  214. // mhayaLogger.Error(err)
  215. // return nil
  216. // }
  217. //
  218. // if cli.PrintLog {
  219. // mhayaLogger.Infof("tcp connect %s is ok", addr)
  220. // }
  221. //
  222. // // 随机休眠
  223. // cli.RandSleep()
  224. //
  225. // // 用户登录到游戏节点
  226. // err := cli.UserLogin(serverId)
  227. // if err != nil {
  228. // mhayaLogger.Warn(err)
  229. // return nil
  230. // }
  231. //
  232. // if cli.PrintLog {
  233. // mhayaLogger.Infof("user login is ok. [user = %s, serverId = %d]", userName, serverId)
  234. // }
  235. //
  236. // //cli.RandSleep()
  237. //
  238. // // 查看是否有角色
  239. // err = cli.PlayerSelect()
  240. // if err != nil {
  241. // mhayaLogger.Warn(err)
  242. // return nil
  243. // }
  244. //
  245. // //cli.RandSleep()
  246. //
  247. // // 创建角色
  248. // err = cli.ActorCreate()
  249. // if err != nil {
  250. // mhayaLogger.Warn(err)
  251. // return nil
  252. // }
  253. //
  254. // //cli.RandSleep()
  255. //
  256. // // 角色进入游戏
  257. // err = cli.ActorEnter()
  258. // if err != nil {
  259. // mhayaLogger.Warn(err)
  260. // return nil
  261. // }
  262. //
  263. // elapsedTime := cli.StartTime.DiffInMillisecond(mhayaTime.Now())
  264. // mhayaLogger.Debugf("[%s] is enter to game. elapsed time:%dms", cli.TagName, elapsedTime)
  265. //
  266. // //cli.Disconnect()
  267. //
  268. // return cli
  269. //}