sse.go 650 B

12345678910111213141516171819202122232425262728293031323334
  1. package util
  2. import (
  3. "app.yhyue.com/moapp/jybase/go-logger/logger"
  4. "app.yhyue.com/moapp/message/model"
  5. "encoding/json"
  6. "sync"
  7. )
  8. type Broadcast struct {
  9. Clients map[chan string]struct{}
  10. Mu sync.Mutex
  11. }
  12. var (
  13. SseBroadcast = &Broadcast{
  14. Clients: make(map[chan string]struct{}),
  15. }
  16. )
  17. // SendToUsers 消息通知
  18. func (s *Broadcast) SendToUsers(msg model.SseMessage) {
  19. s.Mu.Lock()
  20. defer s.Mu.Unlock()
  21. msgData, _ := json.Marshal(msg)
  22. for clientChan := range s.Clients {
  23. select {
  24. case clientChan <- string(msgData):
  25. logger.Info("send to all user, msg:", msg)
  26. default:
  27. logger.Info("Client channel full, skipping")
  28. }
  29. }
  30. }