/Client_Server_App-2.0

Клиент-серверное приложение, которое позволяет работать с коллекцией, хранящей музыкальные группы.

Primary LanguageJava

Что это?

Клиент-серверное приложение, которое позволяет работать с коллекцией, хранящей музыкальные группы. Всего доступно около 20 команд. Вся работа происходит в консоли.

Как запустить у себя?

Запуск проекта в IDE:

  1. Клонировать проект к себе.
  2. Запустить его через IDE.
  3. Открыть файл sever/src/main/resources/database.properties и вписать недостающие значения. (используется PostgreSQL)
  4. В файле sever/src/main/resources/server.properties передается переменная окружения SALT. Чтобы пароли надежно хранились в базе данных, то необходимо создать переменную оружения с именем SALT, значение которой будет соль для хэша (подойдет случайный набор букв, цифр и символов).
  5. Теперь можете запустить файлы ServerApplication и ClientApplication и начать эксперементировать)

Запуск проекта из консоли:

  1. Заходим в директорию Client_Server_App
  2. Выполняем комадну install -f pom.xml
  3. Находим в папках target файлы с названием server*-jar-with-dependencies.jar и client*-jar-with-dependencies.jar
  4. Перекидываем их туда, откуда хотим делать запуск (например, на удаленную машину)
  5. Запуск jar осуществляется следующей командой: java -jar server*-jar-with-dependencies.jar

Что под капотом?

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

  • Взаимодействие между клиентом и сервером происходит по TCP протоколу.
  • Данные передавал при помощи ServerSocketChannel и SocketChannel.
  • Сериализация данных
  • Jdbc, HikaryCP
  • Миграции накатываются с помощью Liquebase
  • JUnit 5 и Mockito
  • Многопоточность

Какой функционал?

Чтобы просмотреть весь функционал необходимо авторизироваться/зарегистрироваться и вызвать команду help изображение Важная пометка: просматривать и собирать статистику можно про все элементы коллекции, а изменять и удалять - только те, которые были добавлены именно с этого аккаунта.

Сервер не зависит от числа одновременно подключенных клиентов.

Что инетерсного я сделал в этом проекте?

  • Закрепил и изучил некоторые тонкости с работой Liquebase
  • Применил в проекте HikariCP
  • Во время разработки проекта использовал паттерны (например, в основе всего проекта лежит паттерн Command)
  • Создал авторизацию и регистрацию пользователей.
  • После входа в аккаунт создается сессия, которая всегда передается с запросом клиента.
  • Настроил время жизни сессии и sheduler который удалят устаревшие сессии из бд (живут 25 минут, но можно настроить в properties)
  • Настроил хэширование паролей
  • Выполнил код по SOLID
  • Постарался применять IoC в классах взаимодействия с бд.
  • Познакомился с concurrency и многопоточностью (в проекте применял ReentrantLock, Fixed thread pool, создание собственных Thread)