@aljo222
В процессе обучения веб-разработке

Как удалять файлы с сервера по условию, что они не используются в текущий момент?

Здравствуйте!

Такая ситуация - есть сайт event-агентства, на котором можно смотреть видео с различных мероприятий.
Агентство довольно крупное, монополист в своем городе и видео копятся очень быстро. Сейчас они решили размещать все видео на своем Яндекс.Диске, на хостинге 50Гб не хватает, больше покупать не хотят.
Файлы на диске хранятся в архивах.
Недавно я написал такой простой функционал: при открытии страницы какого-то события, PHP-скрипт проверят есть ли файлы события в специальной папке на сервере, если нет, то с помощью API Яндекс.Диска скачивается и распаковывается архив на сервере, формируется плейлист из видео данного события и юзер может их смотреть. Если файлы есть, то просто формируется плейлист.
В среднем видео одного события весят по 1.5-2Гб, не меньше. Т.е. если одновременно заходят посмотреть порядка 20 человек, то место заканчивается.
Я написал еще один скрипт и добавил его в cron, который запускается раз в сутки и удаляет файлы старше 12 часов. Решение так себе.

Подскажите пожалуйста как можно улучшить этот момент. Чтобы, условно, если страница события была закрыта и на ней нет больше активных юзеров, то удалять скачанные файлы. Думал ковырять в сторону WebSocket, но пока не было опыта с данной технологией.

Заранее спасибо за подсказки.
  • Вопрос задан
  • 106 просмотров
Решения вопроса 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
В таких условиях надо делать вытесняющий кэш.
Если при запросе нового файла выясняется, что для него нет места, то удаляется самый старый файл.

Хотя конечно непонятно, как это всё поможет в ситуации, когда заходят посмотреть сразу 20 разных событий.
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
А вот что выглядит вкусным
https://github.com/jack-theripper/yandex

Сначала я думал что это жесткий REST-api, в котором есть "дай список", "закачай", "отдай" и "удали". Но там лежит вкусная папка Stream.... где есть метод "считать несколько байт прямо с диска".

Вот если они продолжат в архиве класть 5 видео, а не в папке, то этот функционал вам недоступен и вы в тупике. Но если это будут видеофайлы, то вы можете открывать соединение с яндекс диска через страницу на вашем сайте, где заголовками отдавать что "получаемый файл есть видео, и content-length неизвестен". В теории подрубившись плеером к этому стриму вы внезапно сможете считывать его по чуть-чуть, в результате будете ограничиваться уже толщиной канала и оперативной памятью, куда будут временно выгружаться данные по кускам, а не жестким диском.

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

По сути это вытесняющий кеш и будет как сказал Ипатьев. Но это будет кеш который в моменте хранит только например 8килобайт на юзера.

А если вы как и сказали - подключите сюда еще сокеты (не веб-сокеты, а просто сокеты, tcp например), то вы еще и предотвратите отдачу целого фильма в скрипте даже если пользователь перестал смотреть. Вы просто в шаге цикла while () сможете проверять - есть ли кому контент слать. И если некому то прекращаете чтение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SummerWeb Ярославль
от 120 000 до 180 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $