Я пытаюсь реализовать длинный опрос HTTP для веб-запроса, но не могу найти подходящий пример в документации по каналам, все касается веб-сокетов.
Что мне нужно сделать при использовании HTTP-сообщения:
- дождитесь сообщения в группе, которое будет отправлено при сохранении определенной модели (возможно, с использованием сигналов)
- дождитесь таймаута, если сообщение не получено
а затем вернуть что-нибудь клиенту.
Прямо сейчас у меня есть код, который можно увидеть в примерах:
def http_consumer(message):
# Make standard HTTP response - access ASGI path attribute directly
response = HttpResponse("Hello world! You asked for %s" % message.content['path'])
# Encode that response into message format (ASGI)
for chunk in AsgiHandler.encode_response(response):
message.reply_channel.send(chunk)
Поэтому я должен вернуть что-то в этом http_consumer
, что будет означать, что мне нечего сейчас отправлять, но я не могу заблокировать здесь. Может мне просто ничего не вернуть? Затем я должен поймать новое сообщение в определенной группе или достичь тайм-аута и отправить ответ клиенту.
Кажется, мне нужно будет где-нибудь сохранить message.reply_channel
, чтобы я мог позже ответить, но я не понимаю, как:
- поймать групповое сообщение и сгенерировать ответ
- сгенерировать ответ, когда сообщение не было получено (тайм-аут), может быть, здесь может работать сервер задержки?