Как избежать создания временного файла на стороне сервера при отправке полного HTML-контента клиентам? - PullRequest
0 голосов
/ 17 сентября 2008

В серверном приложении, работающем на Tomcat, я генерирую полные HTML-страницы (с заголовком) на основе случайных сайтов, запрошенных пользователем, которые отключены от Интернета. Клиентское приложение использует асинхронные обратные вызовы для запроса обработки конкретной веб-страницы. Поскольку обработка может занять некоторое время, я хочу проинформировать пользователя о прогрессе с помощью опроса, отсюда и обратные вызовы.

На стороне сервера после извлечения веб-страницы она обрабатывается и создается «расширенная» версия. Затем эта версия должна вернуться к пользователю. Отображение страницы как части страницы клиентского приложения недоступно.

В настоящее время сервер генерирует временный файл и отправляет обратно ссылку на него. Это явно неоптимально.

Следующее лучшее решение, которое я могу предложить, заключается в создании кэширующей БД, которая хранит контент HTML вместе с его md5-суммами или sha1-идентификаторами, а затем отправляет обратно ссылку на сервлет с хеш-идентификатором в качестве аргумент. Затем сервлет запрашивает сайт из кеширующей БД.

Есть ли лучшее решение? Если нет, какой DB-сервер вы бы предложили? Я думаю о SQLite. Часть проблемы, которая должна быть решена, заключается в следующем: как мне переместить страницу <html> на </html> обратно на сторону клиента?

Ответы [ 2 ]

1 голос
/ 17 сентября 2008

Вместо создания временного файла, его заполнения, а затем отправки ссылки, вы можете создать буфер памяти, заполнить его, а затем отправить , который , в качестве ответа (передать его с помощью mime- введите «текст / HTML»). Если вы не хотите отправлять буферы страниц сразу, вы можете сохранить их для дальнейшего использования в сеансе пользователя. Если вы беспокоитесь о том, чтобы таким образом занимать слишком много памяти, вы можете захотеть сохранить в памяти только определенное количество буферов страниц и записать остаток на диск для последующего извлечения. Использование БД звучит как излишнее (в конце концов, нет никакой реляционной информации), но это хорошо решило бы проблему кэширования.

1 голос
/ 17 сентября 2008

Если истинное постоянство не требуется, как насчет использования чего-то более временного, такого как memcached вместо SQL? Вызов семантики довольно чистый и простой - и, конечно, вы можете истечь данные вручную, ttl или @ restart.

...