Django и Long Polling

Мне нужно реализовать длинный опрос в моем приложении для извлечения событий. Но я понятия не имею, как это сделать. Я знаю концепцию длительного опроса, то есть оставляю соединение открытым, пока не произойдет событие. Но как это реализовать в моем проекте. Если бы вы могли дать мне простой длинный опрос на стороне клиента и мнения, которые, я думаю, я бы очень признателен. Спасибо!

+8
источник поделиться
1 ответ

очень простой пример:

import time

def long_polling_view(request):
    for i in range(30): #e.g. reopen connection every 30 seconds
        if something_happened():
            ...
            return http.HttpResponse(
                arbitrary_JSON_content,
                mimetype='application/javascript'
            )
        time.sleep(1)
    return http.HttpResponse({}, mimetype='application/javascript')

с клиентской стороны, вам необходимо обработать тайм-аут и снова открыть соединение.

Однако, я должен сказать, что это вообще плохой подход по ряду причин:

  • он вычислительно дорог как для клиента, так и для сервера
  • это разумно для окружающей среды, например. таймауты
  • он по-прежнему подвержен 1-секундной задержке (например, time.sleep())

В большинстве случаев проверка ответов в setTimeout() каждые 3-5-10 секунд работает очень хорошо, и это более эффективно с точки зрения ресурсов.

Но есть и третий вариант, даже лучше. Фактически, длительный опрос был более историческим, когда больше ничего не делать, чтобы получать обновления в реальном времени. Websockets быстрее, недорого и теперь доступно в Django.

+2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос