Анатомия загрузки - PullRequest
       3

Анатомия загрузки

8 голосов
/ 24 февраля 2011

Мне интересно, каково общее согласие для загрузки умеренно больших файлов. У меня есть веб-приложение, и каждый раз, когда пользователь загружает файл (обычно размером более 5 МБ), веб-сервер обычно зависает до завершения загрузки файла.

Вышеуказанное кажется нормальным, поскольку одна загрузка может занять один обработчик HTTP-запроса. Разработчики сети принимают это во внимание и либо:

а) Оплата дополнительных обработчиков HTTP

б) Используйте другой метод, чтобы преодолеть это с помощью AJAX или другого подхода

Я слышал, что для веб-приложений вполне нормально иметь несколько обработчиков HTTP-запросов для решения этой проблемы, что будет стоить немного дороже. С другой стороны, если стоимость является проблемой, то некоторые предлагают попробовать загрузить напрямую на веб-сервер или службу хранения (например, Amazon S3) напрямую через Flash + AJAX. Последний метод требует немного написания сценариев и немного грязный.

Мое второе беспокойство:

Используя ajax для загрузки файлов на сервер. Это все еще занимает целый обработчик HTTP-запроса? то есть сервер зависает до завершения загрузки?

Даже с flash мне все равно нужно указать URL для загрузки. URL будет одним из действий на моем контроллере. Что означало бы, что обработка все еще происходит на стороне сервера. Это правильно до сих пор?

Я думал. С другой стороны, если бы я использовал один из сценариев загрузки (plupload, uploadify, swfupload и т. Д.) Для загрузки непосредственно в Amazon S3, то обработка выполнялась бы на сервере S3 вместо локального веб-сервера. Который вообще не повесит веб-приложение. Я правильно это понимаю?

Хотелось бы услышать ваш отзыв.

Ответы [ 4 ]

1 голос
/ 24 февраля 2011

Для больших загрузок вы должны использовать неблокирующие, четные серверы, такие как Node.js, Twisted на Pyhon, AnyEvent на Perl или EventMachine на Ruby.Использование модели потокового соединения слишком дорого для длительных соединений.

Нередко пользователи Node.js имеют так много одновременных соединений, что они фактически достигают пределов своих операционных систем, все еще не используявсе их ресурсы - например, см. этот вопрос , заданный кем-то, кто был обеспокоен наличием только 30 тысяч одновременных соединений, а затем сумел достичь более 60 тысяч соединений наодин сервер с 4 ГБ ОЗУ.

Дело в том, что если вы обеспокоены тем, что ваши соединения не позволяют серверу обслуживать новые запросы, вам не следует использовать блокирующий сервер.

0 голосов
/ 27 мая 2011

В будущем, если вы собираетесь делать прямую загрузку на S3 через Rails, ознакомьтесь с моими примерами проектов ниже. Вы избавите себя от многих головных болей, и это не очень "грязно":)

Пример проекта с использованием Rails 3, Flash и FancyUploader на основе MooTools для загрузки непосредственно в S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-FancyUploader

Пример проекта с использованием Rails 3, Flash / Silverlight / GoogleGears / BrowserPlus и Pluquload на основе jQuery для загрузки непосредственно в S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-Plupload

Кстати, вы можете выполнить постобработку с помощью Paperclip, используя что-то вроде этого в блоге, описанном:

http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip

0 голосов
/ 28 февраля 2011

Спасибо за ответы до сих пор.

К сожалению, наш хост Heroku не поддерживает неблокирующие, четные серверы.Я также пробовал flash + javascript-загрузчики, такие как SWFUpload, Uploadify.Некоторые варианты упомянутых плагинов работали, а некоторые нет.Потратил бесчисленные часы проб и ошибок, но мне не понравилось, как код был интегрирован в мое приложение Rails.

В конце концов, мы вручную загрузили файл на S3, перейдя по этой ссылке .Что также позволяет получить ответ от сервера S3, чтобы уведомить нас об успешной загрузке, указав путь к загруженному файлу, чтобы мы могли затем создать фоновое задание (через redis + resque) для обработки файла.

0 голосов
/ 24 февраля 2011

В настоящее время я разрабатываю веб-приложение, которое обрабатывает несколько загрузок изображений одновременно. Я исследовал далеко и широко, и лучший вариант, который я нашел, был swfupload . Это очень легко реализовать и настраивать. Пользователи могут выбрать несколько файлов из диалогового окна, добавить их в очередь и получить реальную информацию о ходе выполнения из браузера. Так что это отставание не так уж важно для пользователя.

Хотя, бах ..... он использует flash для инициализации диалогового окна, но все остальное обрабатывается старым добрым javascript.

Отличный рабочий пример - carbonmade.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...