Отмена через промежуточное ПО - PullRequest
0 голосов
/ 20 апреля 2020

Мое промежуточное ПО для отмены запроса:

func Cancelation(next http.Handler) http.Handler {
  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    ctx := r.Context()
    // create a channel
    ch := make(chan bool)
    serve := func() {
      next.ServeHTTP(w, r)
      ch <- true
    }
    go serve()

    select {
      case <-ch:
        close(ch)
      case <-ctx.Done():
        fmt.Fprintf(os.Stderr, constants.MessageRequestCanceled)
    }
  }
}

Это промежуточное ПО обрабатывает каждый входящий запрос. Когда пользователь отменяет запрос, канал <-ctx.Done() устанавливается и возвращается с func Cancelation, но каждый процесс внутри next.ServeHTTP(w, r) не останавливается и продолжает работать.

Как избежать всего процесса, когда запрос был отменен?

...