Хочу сделать long polling метод в своей api на golang. Как правильно это сделать?
Сейчас реализовал так:
func longPollingHandler(w http.ResponseWriter, r *http.Request) {
done := make(chan struct{})
go checkUpdates(done)
select {
case <- done:
makeAnswer(w)
case <- time.After(20 * time.Second):
makeAnswer(w)
}
}
func checkUpdates(done chan<- struct{}) {
for i := 0; i < 20; i++ {
// Тут проверяю есть ли изменения в базе
// ...
if db.HasChanges() {
break;
}
time.Sleep(time.Second)
}
done <- struct{}{}
}
func makeAnswer(w http.ResponseWriter) {
// Тут шлю ответ клиенту
// ...
}
http.HandleFunc("/api/long_polling", longPollingHandler)
Все работает, но появилось ощущение что ответы на другие методы апи(не лонг поллинг) стали приходить с задержкой. Подозреваю что это изза слипа в горутине.
Как в итоге правильно сделать? Пожалуйста не предлагаейте навешать 10 фреймворков, библиотек и зависимостей.