Skip to content

Cadeusept/thumbnail-loader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

thumbnail-loader

Запуск приложения

Сервер

Linux

  1. В папке cmd запустить bash-скрипт runServer
  2. Для завершения работы использовать комбинацию ctrl + C

Windows

  1. Находясь в корневой папке проекта: выполнить go run serverDownloader.go по пути ./internal/services/downloader/app/
  2. Для завершения работы использовать комбинацию ctrl + C

Клиент

Linux

  1. В папке 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
    
  2. Процесс завершится сам, но для завершения работы, если потребуется, можно использовать комбинацию ctrl + C

Windows

  1. Находясь в корневой папке проекта: выполнить go run serverDownloader.go по пути internal/client/app/ с необходимыми ключами и ссылками на видеоролики.
  2. Процесс завершится сам, но для завершения работы, если потребуется, можно использовать комбинацию ctrl + C

Логика приложения

Клиент

У клиента есть два способа работы: с ключом --async и без него.

С ключом запускается несколько горутин, которые посылают запрос на скачивание на сервер (порт 9091 локальной машины) и сохраняют в папку downloadedThumbnails в корневой директории проекта.

Без ключа все запросы отсылаются на сервер последовательно, папка для сохранения остаётся той же.

Сервер

На сервере полученный запрос обрабатывается: id видеоролика находится из url и хэшируется.

Затем в базе данных SQLite ищется путь к сохранённому файлу по хэшу его идентификатора. Если файл существует, он читается из папки с сохраненными на сервере thumbnail'ами и отправляется клиенту в виде слайса байт.

Если файл в кэше не найден, сервер будет пытаться скачать его с сайта youtube. Сначала он будет качать thumbnail в высоком разрешении, а затем в низком. Если файл был скачан, он сохраняется в папке internal/services/downloader/downloadedThumbnails, и в базе данных сохраняется запись для поиска пути к thumbnail'у по хэшу идентификатора видеоролика. После сервер отправляет изображение клиенту в виде слайса байт.

Почему thumbnail'ы не хранятся в базе данных целиком?

В базу данных можно было бы сохранять картинки в столбцы с типом "blob", но SQLite достаточно медленная база данных и неустойчивая к большому количеству соединений, поэтому было решено хранить в ней только пути к скачанным на жёсткое хранилище файлам.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published