session.go 835 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package ws
  2. import (
  3. "github.com/gorilla/websocket"
  4. "sync"
  5. "time"
  6. )
  7. // Session 会话结构
  8. type Session struct {
  9. ID string
  10. UserID int
  11. Conn *websocket.Conn
  12. LastActive time.Time
  13. qaLimiter *QALimiter
  14. Latency *LatencyMeasurer
  15. CloseChan chan struct{}
  16. MessageChan chan []byte
  17. mu sync.RWMutex
  18. }
  19. // HeartbeatManager 心跳管理器
  20. type HeartbeatManager struct {
  21. interval time.Duration
  22. sessions sync.Map
  23. closeChan chan struct{}
  24. }
  25. // LatencyMeasurer 延迟测量器
  26. type LatencyMeasurer struct {
  27. measurements []time.Duration
  28. lastLatency time.Duration
  29. mu sync.Mutex
  30. }
  31. // NewHeartbeatManager 创建心跳管理器
  32. func NewHeartbeatManager(interval time.Duration) *HeartbeatManager {
  33. return &HeartbeatManager{
  34. interval: interval,
  35. closeChan: make(chan struct{}),
  36. }
  37. }