TTW_Bot_GO/internal/webservices/base.go

38 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package webservices
import (
"sync"
)
type baseService struct {
port int
running bool
mu sync.RWMutex
clients map[chan interface{}]bool
clientsMu sync.RWMutex
}
func newBaseService(port int) *baseService {
return &baseService{
port: port,
clients: make(map[chan interface{}]bool),
}
}
// broadcast отправляет данные всем подключённым SSE-клиентам
func (s *baseService) broadcast(data interface{}) {
s.clientsMu.RLock()
defer s.clientsMu.RUnlock()
for ch := range s.clients {
// Убираем default, чтобы отправка была блокирующей, но тогда один медленный клиент может замедлить всех
// Лучше увеличить буфер и оставить default с предупреждением
select {
case ch <- data:
default:
// Если канал заполнен, это проблема клиента, но мы не должны терять сообщения для других клиентов.
// Однако блокировка нежелательна. Увеличим буфер до 500.
}
}
}