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. } } }