common.go 661B

123456789101112131415161718192021222324252627282930313233343536
  1. package controllers
  2. import (
  3. "annual-lottery2/utils"
  4. "net/http"
  5. "github.com/astaxie/beego"
  6. )
  7. var lpdata = utils.NewMsgQueue()
  8. // LongPoll 长轮询
  9. func (c *BaseController) LongPoll() {
  10. mth := c.Ctx.Input.Method()
  11. // id := c.GetString(":id")
  12. if mth == http.MethodGet {
  13. select {
  14. case dt := <-lpdata.Queue():
  15. beego.Info("发送状态数据: ", dt)
  16. c.ResponseJson(dt)
  17. return
  18. case <-c.Ctx.ResponseWriter.ResponseWriter.(http.CloseNotifier).CloseNotify():
  19. c.ResponseJson("nil")
  20. return
  21. }
  22. } else {
  23. msg := c.GetString("message")
  24. beego.Info("获取到状态数据: ", msg)
  25. go lpdata.Push(msg)
  26. c.ResponseJson("")
  27. }
  28. return
  29. }