Я хочу поставить все прибывающие http.Request
s в очередь и иметь отдельный поток (goroutine
?) Обрабатывать эти запросы и возвращать соответствующий статус.Завершить http.Request асинхронно в Golang
Однако основной обработчик http request
выполняет запрос, даже если объект http.Request
отправлен асинхронно на goroutine
.
Есть ли способ управления, когда http.Request
завершен и тем самым асинхронно его обрабатывает?
[Update]
Я хочу реализовать модель производитель-потребитель. Основной обработчик запросов создает запросы и помещает их в очередь. Потребительский поток (или потоки) будет читать эти запросы, потреблять тело запросов и возвращать их.
Я должен признать, что я не понимаю, что ваш вопрос здесь? Пакет net/http _does_ обрабатывает запрос асинхронно уже. И, конечно же: если обработчик завершает запрос, это делается. Если вы не хотите этого, ваш обработчик не должен заканчиваться, но выполняйте свою другую работу, которую вы намереваетесь делать асинхронно. – Volker
Полезно знать, что пакет net/http обрабатывает HTTP-запросы асинхронно. Но я хочу вытолкнуть все HTTP-запросы в очередь от обработчика (продюсера) и попросить другой поток (потребитель) прочитать эти запросы и свои данные и вернуть их (я уточню основной вопрос с некоторыми из них для лучшей видимости). –
Хорошо, я думаю, что это бессмысленно, поскольку это делает запрос обработкой ** синхронного ** процесса, но это можно сделать: обработчик запроса перенаправляет запрос в канал 1 и _waits_ (!!), пока потребитель не обработает запрос ожидая результата на канале 2. Потребитель слушает на канале 1, захватывает запрос, обрабатывает их и возвращается к производителю через канал 2. Полная последовательная обработка. Не делай этого, это абсурд. Go http server _is_ уже является производителем и вашими обработчиками _are_ потребителями, нет необходимости повторять эту работу. – Volker