Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

WebSocket Chat Application

Современное веб-приложение для чата в реальном времени, построенное на Spring Boot с использованием WebSocket технологий.

🚀 Описание проекта

Это полнофункциональное чат-приложение, которое обеспечивает:

  • Публичное общение - отправка сообщений всем участникам чата
  • Приватные сообщения - индивидуальная переписка между пользователями
  • Уведомления в реальном времени - мгновенные оповещения о присоединении/выходе пользователей
  • Динамический список участников - отображение всех активных пользователей
  • Современный веб-интерфейс - отзывчивый дизайн с интуитивным управлением

🛠 Технологический стек

Backend

  • Spring Boot 3.1.3 - основной фреймворк приложения
  • Spring WebSocket - для двусторонней связи в реальном времени
  • STOMP Protocol - протокол обмена сообщениями поверх WebSocket
  • Lombok - для уменьшения boilerplate кода
  • Maven 3.9.9 - система сборки и управления зависимостями

Frontend

  • HTML5 - структура веб-страниц
  • CSS3 - стилизация и адаптивный дизайн
  • Vanilla JavaScript (ES6+) - клиентская логика
  • STOMP.js 7.0.0 - JavaScript клиент для STOMP протокола
  • Thymeleaf - серверный шаблонизатор

Архитектурные решения

  • MVC Pattern - разделение логики на Model-View-Controller
  • Record Classes (Java 14+) - неизменяемые структуры данных
  • Service Layer - бизнес-логика в отдельном слое
  • Event-Driven Architecture - обработка подключений/отключений через события

📁 Структура проекта

src/
├── main/
│ ├── java/kg/attractor/websockets/
│ │ ├── config/
│ │ │ └── WebSocketConfig.java # Конфигурация WebSocket
│ │ ├── controller/
│ │ │ ├── ChatController.java # Контроллер чата
│ │ │ └── WebController.java # Веб-контроллер
│ │ ├── enums/
│ │ │ └── Action.java # Типы действий пользователей
│ │ ├── model/
│ │ │ ├── Message.java # Модель сообщения
│ │ │ └── User.java # Модель пользователя
│ │ ├── services/
│ │ │ └── MemberStore.java # Сервис управления участниками
│ │ └── WebSocketsApplication.java # Главный класс приложения
│ └── resources/
│ ├── static/
│ │ ├── app.js # Клиентская JavaScript логика
│ │ └── style.css # Стили приложения
│ ├── templates/
│ │ └── index.html # Главная страница
│ └── application.properties # Конфигурация приложения

⚙️ Ключевые функции

Подключение к чату

  • Валидация имени пользователя (только буквы и цифры)
  • Уникальная идентификация пользователей через UUID
  • Автоматическое уведомление о новых участниках

Обмен сообщениями

  • Публичные сообщения: видны всем участникам чата
  • Приватные сообщения: доставляются только конкретному получателю
  • Временные метки для всех сообщений
  • Визуальное разделение приватных и публичных сообщений

Управление соединениями

  • Автоматическая очистка при отключении пользователей
  • Обработка непредвиденных разрывов соединения
  • Динамическое обновление списка активных пользователей

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

Предварительные требования

  • Java 17 или выше
  • Maven 3.6+

Локальный запуск

  1. Клонирование репозитория
git clone <repository-url>cd websockets-chat
  1. Запуск через Maven
./mvnw spring-boot:run
  1. Альтернативный запуск
./mvnw clean package
java -jar target/SpringBootWebSockets-0.0.1.jar
  1. Открытие в браузере
http://localhost:8080

🏗 Архитектурные особенности

WebSocket Конфигурация

  • Message Broker: простой брокер для топиков /topic и /user
  • Application Prefix: /app для маршрутизации сообщений
  • User-specific destinations: индивидуальные каналы для приватных сообщений

Модель данных

  • User: неизменяемый record с id, serialId и username
  • Message: содержит пользователя, получателя, контент и тип действия
  • Action enum: определяет типы событий (JOINED, LEFT, NEW_MESSAGE, etc.)

Управление состоянием

  • In-memory хранение активных пользователей
  • Thread-safe операции через статический список
  • Автоматическая нумерация пользователей для UI

🎯 Особенности реализации

  • Безопасность типов: использование современных Java features (Records, Optional)
  • Реактивность: полностью асинхронная обработка сообщений
  • Масштабируемость: возможность легкого расширения функциональности
  • Производительность: минимальные накладные расходы благодаря STOMP протоколу

📈 Возможности развития

  • Интеграция с базой данных для персистентности
  • Аутентификация и авторизация пользователей
  • Групповые чаты и каналы
  • Загрузка файлов и медиа
  • Push-уведомления
  • Мобильное приложение

Разработано с использованием современных веб-технологий для создания высокопроизводительного чата в реальном времени.

About

Современное веб-приложение для чата в реальном времени, построенное на Spring Boot с использованием WebSocket технологий.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages