Делаем файлообменник [3: Отдача файла]
Здесь теория, потому как это ещё не готово.
В общем, при отдаче нужно:
- Проверять, имеет ли этот пользователь право скачивать этот файл
- Проверять, не идёт ли этому пользователю отдача этого или другого файла
- Ограничивать скорость отдачи
Обычно для таких задач используют сервер, построенный по модели конечного автомата(автоматное программирование). В этом случае один процесс сможет эффективно обслуживать большое количество соединений. Для своей реализации я нашёл библиотеку на Perl, с помощью которой такой сервер можно достаточно просто написать - пример реализации веб-сервера для отдачи файла (без проверок и ограничения скорости) занимает менее 100 строк кода. Но, ещё раз повторюсь, это всё пока теория, требующая проверки.
Предыдущие части: 1: Планирование, 2: Индикатор загрузки.
10 коммент.:
имхо, лучше делать как-то так:
положить на порт скажем 8080 сервера какой-нибудь быстрый httpd сервер типа mathopd; про запросе файла создавать в файлсистеме этого сервера линк на файл, и он пускай отдает.
после скачки (или таймаута) линк удаляется
Конечно, этот способ можно использовать. И он гораздо проще. Только вместо порта лучше сделать поддомен на другом IP (не у всех открыт порт отличный от 80).
Я же хочу достичь большей гибкости (вроде изменения скорости скачивания на лету), вот и экспериментирую.
ох щит, велосипеды Ж)
nginx все это умеет из коробки, и ограничения количества скорости скачек на пользователя и авторизация хешем, ну и прозреваю он сильно быстрее перла хоты бы файловым вводом выводом :)
nginx все это умеет из коробки
И с БД работать он тоже умеет? ;)
Зачем серверу с бд работать? Через fastcgi подключаешь что угодно и там работаешь.
Nginx порвет любое ваше perl-решение на много много порядков (!!).
а зачем тебе бд во время отдачи :)
В любом случае X-Accel-Redirect спасет отца русской демократии, дав реализовать на перле логику не заставляя в нем же отдавать файлы :)
Про X-Accel-Redirect не знал, спасибо :)
Мндя
И эти люди учат писать файлообменники
Интересно следить за развитием проекта, планируете ли выложить готовый результат (код в смысле)?
Пока не планирую - это ведь экспериментальный проект и поддерживать его никакого желания нет.
Какие-то части покажу, но не столько для использования, сколько для совместного обсуждения.
Отправить комментарий