Я написал небольшую функцию-обертку, которая использует концепцию подсчета семафоров, чтобы ограничить количество соединений с определенным обработчиком (так как этот обработчик потребляет ресурсы). Ниже приведен код, который достигает того же.
func LimitNumClients(f http.HandlerFunc, maxClients int) http.HandlerFunc {
// Counting semaphore using a buffered channel
sema := make(chan struct{}, maxClients)
return func(w http.ResponseWriter, req *http.Request) {
sema <- struct{}{}
defer func() { <-sema }()
f(w, req)
}
}
А затем обернуть его в обработчик, как показано ниже
Route{
"Test",
"GET",
/test,
LimitNumClients(testhandler, 5),
},
Теперь я хочу ответить с ошибкой 501, когда достигнут предел клиента для любого нового соединения.
Как добиться того же.