Предположим, для каждого пользователя, который обратился к определенному урлу, у меня начинаются вычисления которые могут длиться порядка 10-ти секунд (или больше). Тут же появляется вопрос что делать, чтобы пользователь этих 10 секунд не видел пустую страницу. Я вычитал много интересной информации, которую пока не до конца структурировал, поэтому вижу следующие пути решения:
- Использовать очереди сообщений и синхронный бэкенд сервер. В этом случае сервер создает сокет соединение с клиентом и отдает ему html страницу (стили, скрипты и все остальное в этом духе отдает nginx), а в очередь отдает задачу на вычисления и после получения ответа от очереди пушит клиенту результат.
- Использовать асинхронный веб-сервер (python tornado, node.js). Знаю что tornado создает экземпляр класса для каждого клиента и при этом в цикле не забывает о других пользователях. Поэтому, как я понимаю, можно отдать пользователю html, настроив сокет соединение, и прямо в классе вьюхи вызвать функцию вычислений и пушить клиенту результат.
- Наверное, никто не станет бить меня по рукам и губам, если я подумаю об использовании асинхронного сервера и очереди, но сам я пока не вижу с этого выгоды.
Объясните, пожалуйста, в чем преимущества каждого из способов, какие варианты еще есть и правильно ли я вообще себе все представляю. Понимаю, что объяснять это все долго, поэтому буду благодарен и если просто закидаете меня кучей ссылок :)