Я создаю сервер Java, который нужно масштабировать. Один из сервлетов будет обслуживать изображения, хранящиеся в Amazon S3.Поток больших файлов в сервлет Java
Недавно под нагрузкой у меня закончилась память в моей виртуальной машине, и это было после того, как я добавил код для обслуживания изображений, поэтому я уверен, что потоковое увеличение ответов сервлета вызывает мои проблемы.
Мой вопрос: есть ли какие-либо рекомендации в отношении того, как закодировать сервлет Java для потоковой передачи большого (> 200k) ответа на браузер при чтении из базы данных или другого облачного хранилища?
Я рассмотрел возможность записи файла на локальный временный диск, а затем создаю другой поток для обработки потоковой передачи, чтобы поток сервлетов tomcat можно было повторно использовать. Кажется, это было бы тяжело.
Любые мысли будут оценены. Благодарю.
Хмм, поскольку длина содержимого не задана, контейнер сервлета должен буферизировать, потому что ему нужно установить заголовок длины контента, прежде чем он сможет передавать любые данные. Не уверен, сколько памяти вы сохраните? – 2012-02-01 15:54:36
Питер, если вы не можете указывать пользователям прямо на URL-адрес облачной службы, и вы хотите установить заголовок длины контента, и вы еще не знаете размер, и вы не можете запросить облачную службу для размера, тогда я предполагаю, что ваш Лучшая ставка - сначала передать в временный файл на сервере. Конечно, сохранение копии на сервере перед отправкой первого байта клиенту может привести к тому, что пользователь будет считать запрос неудачным в зависимости от того, как долго переносится облако -> сервер. – 2012-02-13 03:55:37