Форум сайта python.su
Всем доброе утро!
Делаю систему, которая на запрос пользователя рассылает несколько запросов и по приходу резальтатов выдаёт пользователю страницу. Запросы выполняются разное время (10 - 100 секунд). И пользователь получает результат только когда придёт последний, самый долгий запрос.
Хочу сделать так: Пользователю получает AJAX-ом результаты по мере готовности. Тоесть первый результат от получит уже через 10 секунд. А остальные как будут готовы.
Теперь о том как это реализовать:
1) Со стороны браузера всё вроде просто. Отправляет запрос, а потом раз в 5 секунд опрашивает нет ли ответа. Если что есть - то Яваскрипт это размещает на странице. Опрашивает до тех пор, пока с ответом не придёт done = true.
2) Реализация со стороны сервера вызывает главные вопросы. Наверное надо каждому пользователю вешать в куки некий id-запроса, с которым он будет стучаться раз в 5 секунд.
А где хранить данные, когда они уже готовы, чтобы потом выдать их пользователю? Класть в БД?
Тоесть я вижу это так: Пользователь сделал запрос. Ставим пользователю куки с id. Код, который выполняет запрос, начинает крутиться отдельной нитью, где каждые отдельные подзапросы ещё отдельными нитями крутятся. По прихожу результатов кладём их в БД. Javascript со стороны пользователя раз в 5 секунд стучится на скрипт, который по id пользователя смотрит в БД, не появилось ли там для пользователя результатов. Если появилось - выдаёт.
Подскажите пожалуйста, таким ли образом это делается? Первый раз делаю подобное. Спасибо.
Офлайн
Выглядит нормально, я бы так и сделал.
Офлайн
Офлайн
alphavilleПочитайте про long polling, ссылку Вам уже указали.
Делаю систему, которая на запрос пользователя рассылает несколько запросов и по приходу резальтатов выдаёт пользователю страницу. Запросы выполняются разное время (10 - 100 секунд). И пользователь получает результат только когда придёт последний, самый долгий запрос.
Офлайн
“будет стучаться раз в 5 секунд”-это и есть поллинг, большего не прочитаете. метод такой.
Во Flash есть сокеты, а JS с Flash взаимодействует. Аяксеры этим не хотят пользоваться, хотя идея на поверхности.
У меня вопрос - что вы называете нитью. Вижу понятие “нить” не в первые, им программеры оперируют, но почему-то у питонистов его слышу часто (читаю). Это сродни потоку или жаргон или особая технология?
Офлайн
Гляньте в англо-русском словаре перевод для “thread”. Тут уж скорее “поток” вопросы должен вызывать :)
Офлайн
Андрей СветловДа, говорила мама “учи английский” …
Гляньте в англо-русском словаре перевод для “thread”. Тут уж скорее “поток” вопросы должен вызывать :)
Офлайн