center_controller.go 914 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package controller
  2. import (
  3. actorRemote "f1-game/internal/actor_remote"
  4. nameKey "f1-game/internal/name/key"
  5. "fmt"
  6. "sync"
  7. ctime "github.com/cherry-game/cherry/extend/time"
  8. cgin "github.com/cherry-game/components/gin"
  9. )
  10. type centerController struct {
  11. cgin.BaseController
  12. }
  13. func (p *centerController) Init() {
  14. p.GET("/center/ping", p.ping)
  15. }
  16. func (p *centerController) ping(c *cgin.Context) {
  17. num := c.GetInt(nameKey.Num, 1)
  18. if num < 1 || num > 10000 {
  19. num = 1
  20. }
  21. wg := &sync.WaitGroup{}
  22. start := ctime.Now()
  23. for i := 0; i < num; i++ {
  24. wg.Add(1)
  25. go func() {
  26. if actorRemote.CenterOps.Ping() {
  27. wg.Done()
  28. }
  29. }()
  30. }
  31. wg.Wait()
  32. diffNanosecond := ctime.Now().ToNanosecond() - start.ToNanosecond()
  33. t := struct {
  34. Num int `json:"num"`
  35. Elapsed string `json:"elapsedTime"`
  36. }{
  37. Num: num,
  38. Elapsed: fmt.Sprintf("%d Nanosecond", diffNanosecond),
  39. }
  40. c.RenderJSON(&t)
  41. }