Может ли загрузка быть слишком быстрой?

Я не уверен, что это правильное место, чтобы спросить это, но я все равно сделаю это.

Я разработал загрузчик для Umbraco CMS, который позволяет людям загружать очереди файлов за один раз. Для этого используется простое флэш-приложение, которое просто вызывает.NET ashx для загрузки файлов по одному. Когда один сделан, следующий начинается.

Недавно у меня была проблема с пользователем, когда 1 или 2 загрузки пройдут нормально, но остальные не получатся. Это происходит для него самого и его клиента. После некоторой отладки он думает, что он нашел проблему, но это кажется странным, поэтому задавался вопросом, была ли у кого-нибудь еще эта проблема?

И он, и его клиент подключены к оптоволоконному широкополосному соединению, поэтому имеют очень высокую скорость загрузки. Когда он был протестирован на широкополосном соединении с меньшей скоростью, все файлы были загружены без проблем. По словам одного из его друзей-разработчиков, по-видимому, они сталкивались с этим раньше и должны были внести небольшую задержку в скрипт загрузки, чтобы он заработал.

Возможно ли это звучит? Кто-нибудь еще столкнулся с этой проблемой? Существует ли известный обходной путь для предотвращения сбоя загрузки?

2 ответа

Я столкнулся с подобной проблемой на веб-сайте MVC2 с использованием Flash Uploader и Firefox. Серверы были сбалансированы с помощью балансировщика нагрузки Big-IP. Что мы обнаружили при отладке, так это то, что Flash в Firefox не отправлял идентификатор сеанса в запросах на продолжение, а балансировщик нагрузки отправлял запросы на продолжение на другой сервер. Поскольку у пользователя не было сессии на новом сервере, запрос не прошел.

Если файл может быть отправлен в один блок, он будет загружен нормально. Если это потребовало второй кусок, это не удалось. Из-за этого загрузка не удалась бы после того, как было загружено неопределенное количество файлов.

Чтобы исправить это, я написал загрузчик Silverlight.

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

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

1) Потеря пакетов. Конечно, когда некоторые ссылки получают очень большой объем трафика, они могут просто сбросить много данных (например, все, что превышает максимальный размер этого канала), но TCP/IP должен контролировать это, и также ожидая, что подобные вещи будут время от времени падать, так что это кажется менее вероятным.

2) Принимающий сервер может иметь некоторые узкие места HTTP на этом сервере или даже ЦП / ОЗУ принимающего сервера и т. Д., Может быть загружен.

С точки зрения устранения неполадок, даже если эти симптомы не должны (в теории) существовать, факт, что они есть, и у вас есть конкретные

Следующие шаги, если вам действительно нужно понять, как все это работает, могут заключаться в том, чтобы получить какой-то анализатор пакетов (например, WireShark), чтобы попытаться выяснить, что именно происходит на уровне пакетов.

Кроме того, программирование сокетов часто может программировать непосредственно на сокеты TCP/IP, поэтому вы будете обрабатывать на нижних уровнях сети, видеть ответы, тайм-ауты и т. Д.

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

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

Результат? Добавьте в код загрузки функцию замедления, и это должно, по крайней мере, заставить код работать.

Свяжитесь с нами, если вам нужен анализ материала WireShark.

Другие вопросы по тегам