alphaville
Окт. 22, 2009 06:41:28
Всем доброе утро!
Делаю систему, которая на запрос пользователя рассылает несколько запросов и по приходу резальтатов выдаёт пользователю страницу. Запросы выполняются разное время (10 - 100 секунд). И пользователь получает результат только когда придёт последний, самый долгий запрос.
Хочу сделать так: Пользователю получает AJAX-ом результаты по мере готовности. Тоесть первый результат от получит уже через 10 секунд. А остальные как будут готовы.
Теперь о том как это реализовать:
1) Со стороны браузера всё вроде просто. Отправляет запрос, а потом раз в 5 секунд опрашивает нет ли ответа. Если что есть - то Яваскрипт это размещает на странице. Опрашивает до тех пор, пока с ответом не придёт done = true.
2) Реализация со стороны сервера вызывает главные вопросы. Наверное надо каждому пользователю вешать в куки некий id-запроса, с которым он будет стучаться раз в 5 секунд.
А где хранить данные, когда они уже готовы, чтобы потом выдать их пользователю? Класть в БД?
Тоесть я вижу это так: Пользователь сделал запрос. Ставим пользователю куки с id. Код, который выполняет запрос, начинает крутиться отдельной нитью, где каждые отдельные подзапросы ещё отдельными нитями крутятся. По прихожу результатов кладём их в БД. Javascript со стороны пользователя раз в 5 секунд стучится на скрипт, который по id пользователя смотрит в БД, не появилось ли там для пользователя результатов. Если появилось - выдаёт.
Подскажите пожалуйста, таким ли образом это делается? Первый раз делаю подобное. Спасибо.
Ferroman
Окт. 22, 2009 14:31:07
Выглядит нормально, я бы так и сделал.
ZioN
Окт. 22, 2009 19:01:49
alphaville
Делаю систему, которая на запрос пользователя рассылает несколько запросов и по приходу резальтатов выдаёт пользователю страницу. Запросы выполняются разное время (10 - 100 секунд). И пользователь получает результат только когда придёт последний, самый долгий запрос.
Почитайте про long polling, ссылку Вам уже указали.
pioner
Окт. 27, 2009 08:46:47
“будет стучаться раз в 5 секунд”-это и есть поллинг, большего не прочитаете. метод такой.
Во Flash есть сокеты, а JS с Flash взаимодействует. Аяксеры этим не хотят пользоваться, хотя идея на поверхности.
У меня вопрос - что вы называете нитью. Вижу понятие “нить” не в первые, им программеры оперируют, но почему-то у питонистов его слышу часто (читаю). Это сродни потоку или жаргон или особая технология?
Андрей Светлов
Окт. 27, 2009 09:42:42
Гляньте в англо-русском словаре перевод для “thread”. Тут уж скорее “поток” вопросы должен вызывать :)
pioner
Окт. 27, 2009 11:17:00
Андрей Светлов
Гляньте в англо-русском словаре перевод для “thread”. Тут уж скорее “поток” вопросы должен вызывать :)
Да, говорила мама “учи английский” …
Все говорят “потоки”, питонисты-“нити”.
Питонисты говорят “словарь”, остальным понятен “ассоциативный массив”. А к чему это? Только с толку сбивает, имхо. Сори за флейм.
Вопрос: есть смысл с потоками связываться на виртуальных серверах? Сервер сам по себе многопоточный и пользовательские потоки увеличат нагрузку на процессор, на что хостеры могут хмуро посмотреть. Как считаете?