Оно конечно в целях самообучения конечно классно, но для продакшена уверен — положет сервер. Насколько я знаю — тоже самое можно реализовать через проксирующий фронт-энд, например nginx
Если правильно понял, то «шареде» — имеется ввиду бесплатный, так? На бесплатном, считаю, необходимость в раздаче вряд-ли появится, а вот используя платный хостинг можно, например, раздавать какой-либо авторский контент, при этом отдавать его очень быстро — за деньги, а бесплатно — медленно. При этом не имея финансовой возможности купить/арендовать полноценный сервер.
нет, не бесплатный, а shared хостинг (http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3)
Собственно да, свой контент (пару файлов там) отдавать то никто не запретит, но в остальном за сервисы файлораздачи хостеры по головке не гладят.
Да конечно, вон какой-нить валуехост легко даст гига 3, агава вон 25 вообще, этого вполне достаточно чтобы положить свежий дистрибутив квипа, несколько образов убунты и еще с десяток очень нужных всем файлов :)
Имхо логику надо немного подправить:
Если у пользователя есть активные подключения — не надо «спать», надо закрывать новое подключение, а не «подвешивать» его, долбясь в БД каждую секунду.
Поддерживаю и предлагаю, по возможности, развить эту ветку.
«Сон» был организован для того, чтобы даунлоад-менеджеры определяли поддержку докачки. Считаю организацию оптимальной для решения задачи. Я ошибаюсь?
представь — я качаю файл регетом, он открывает 20 соединений.
что получается — первое соединение качает файл, остальные 19 висят и создают нагрузку 19 запросов к БД в секунду. И это только от одного пользователя!
Имхо состояние надо хранить не в БД, а в сессии и лишние коннекты рубить, а не висеть.
А если даунлоад-менеджер не поддерживает куки? Тогда такой вариант провалится.
Возможно сохранять файл с именем — IP-адреса. В последсвии проверять: если файл существует, значит соединение уже естановлено, если отсутствует, то создавать и приступать к отдаче.
Memcache — PECL-овское расширение PHP, которое не поставляется вместе с PHP, вследствии отсутствует на виртуальном хостинге.
Повторюсь, что данный пример расчитан на случай, в котором возможность приобрести сервер — отсутствует.
Не надо перекладывать на приложение то, чем должен заниматься вебсервер. Если проект не перерос шаред хостинг, то и ограничение там не нужны :) Даже 10 пользователей качающих одновременно фаил в несколько потоков положат все процессы апача.
Вынужден несогласиться. Тестировал на виртуальном хостинге мастерхоста. Качал в 20 пользователей, использовал Download Master (он пытался создать по 8 потоков на каждое скачивание), размер скачиваемого файла 100 Мб. Никаких проблем не возникло.
как можно заметить — на небольших скоростях получаем неплохие потери. такие же потери мы наблюдаем даже на 512 и мегабите… более того — даже на 5мбит'ах мы не получаем заявленных в скрипте 512кбит/с
вердикт: $speed это не скорость отдачи, а некий коэффициент, который нелинейно на неё влияет.
Ограничение скорости скачивания файлов средствами PHP