Неправильно ли возвращать 202 «Принято» в ответ на HTTP GET?

У меня есть набор ресурсов, представления которых создаются лениво. Вычисление для построения этих представлений может занять от нескольких миллисекунд до нескольких часов, в зависимости от загрузки сервера, конкретного ресурса и фазы луны.

Первый запрос GET, полученный для ресурса, запускает вычисление на сервер. Если вычисление завершится в течение нескольких секунд, вычисленное представление возвращается. В противном случае возвращается код состояния 202 «Принято», и клиент должен опрашивать ресурс до тех пор, пока не будет доступно окончательное представление.

Причина такого поведения следующая: если результат доступен в течение нескольких секунд, ему необходимо быть извлеченным как можно скорее; в противном случае, когда он станет доступным, не имеет значения.

Из-за ограниченного объема памяти и огромного количества запросов ни NIO, ни длительный опрос не подходят ( т.е. Я не могу поддерживать почти достаточное количество открытых соединений, я даже не могу вместить все запросы в память: по прошествии "нескольких секунд" я сохраняю лишние запросы). Точно так же ограничения клиента таковы, что вместо этого они не могут обрабатывать обратный вызов завершения. Наконец, обратите внимание, я не заинтересован в создании " Можно ли разбить большие файлы на куски до того, как файл будет загружен на сервер? Например, разделите файл размером 10 МБ на фрагменты по 1 МБ и загрузите по одному фрагменту за раз, показывая ...

Можно ли на веб-странице разбить большие файлы на фрагменты до того, как файл будет загружен на сервер? Например, разделить файл размером 10 МБ на фрагменты по 1 МБ и загружать по одному фрагменту за раз, показывая индикатор выполнения?

Похоже, в JavaScript нет возможности манипулировать файлами, но как насчет апплетов Flash и Java?

Это должно работать в IE6 +, Firefox и Chrome. Обновление : забыл упомянуть, что (а) мы используем Grails и (б) это должно работать через https.

6
задан Yevgeniy Brikman 4 November 2010 в 20:34
поделиться