- В папке
cmd
запустить bash-скриптrunServer
- Для завершения работы использовать комбинацию
ctrl + C
- Находясь в корневой папке проекта: выполнить
go run serverDownloader.go
по пути./internal/services/downloader/app/
- Для завершения работы использовать комбинацию
ctrl + C
- В папке
cmd
запустить bash-скриптthumbnail_loader
с необходимыми ключами и ссылками на видеоролики. Доступен ключ-h
с мануалом (сделан при помощи модуля cobra):❯ ./thumbnail_loader -h You can load thumbnails one by one or altogether asynchroniously Usage: thumbnail_loader [flags] Flags: -a, --async Downloads thumbnails async -h, --help help for thumbnail_loader -v, --version version for thumbnail_loader
- Процесс завершится сам, но для завершения работы, если потребуется, можно использовать комбинацию
ctrl + C
- Находясь в корневой папке проекта: выполнить
go run serverDownloader.go
по путиinternal/client/app/
с необходимыми ключами и ссылками на видеоролики. - Процесс завершится сам, но для завершения работы, если потребуется, можно использовать комбинацию
ctrl + C
У клиента есть два способа работы: с ключом --async
и без него.
С ключом запускается несколько горутин, которые посылают запрос на скачивание на сервер (порт 9091 локальной машины) и сохраняют в папку downloadedThumbnails
в корневой директории проекта.
Без ключа все запросы отсылаются на сервер последовательно, папка для сохранения остаётся той же.
На сервере полученный запрос обрабатывается: id видеоролика находится из url и хэшируется.
Затем в базе данных SQLite ищется путь к сохранённому файлу по хэшу его идентификатора. Если файл существует, он читается из папки с сохраненными на сервере thumbnail'ами и отправляется клиенту в виде слайса байт.
Если файл в кэше не найден, сервер будет пытаться скачать его с сайта youtube. Сначала он будет качать thumbnail в высоком разрешении, а затем в низком. Если файл был скачан, он сохраняется в папке internal/services/downloader/downloadedThumbnails
, и в базе данных сохраняется запись для поиска пути к thumbnail'у по хэшу идентификатора видеоролика. После сервер отправляет изображение клиенту в виде слайса байт.
В базу данных можно было бы сохранять картинки в столбцы с типом "blob", но SQLite достаточно медленная база данных и неустойчивая к большому количеству соединений, поэтому было решено хранить в ней только пути к скачанным на жёсткое хранилище файлам.