Files
rltn/server

Серверная часть EEV_Proj

Описание

Серверная часть проекта EEV_Proj построена на Node.js и Express. Сервер обеспечивает API для клиентской части, управляет WebSocket соединениями и взаимодействует с базой данных PostgreSQL.

Структура

server/
├── server.js              # Основной файл сервера
├── db.js                  # Подключение к базе данных
├── db1.js                 # Альтернативная конфигурация БД
├── organizations.js        # Логика организаций
├── ecosystem.config.js     # Конфигурация PM2
└── README.md              # Эта документация

Основные компоненты

server.js

Главный файл сервера, который:

  • Инициализирует Express приложение
  • Настраивает middleware
  • Определяет API маршруты
  • Запускает WebSocket сервер
  • Обрабатывает игровую логику

db.js

Модуль для работы с базой данных PostgreSQL:

  • Подключение к БД
  • Выполнение SQL запросов
  • Управление транзакциями

organizations.js

Логика для работы с организациями в игре:

  • Создание организаций
  • Управление меню организаций
  • Обработка покупок

API эндпоинты

Аутентификация

  • POST /api/auth/login - Вход в систему
  • POST /api/auth/register - Регистрация

Интерьеры

  • GET /api/interiors/:id/definition - Получение определения интерьера
  • POST /api/interiors/:id/enter - Вход в интерьер

Объекты города

  • GET /api/city_objects/:id/interior - Получение информации об объекте

Экономика

  • GET /api/economy/balance - Получение баланса
  • POST /api/economy/purchase - Покупка предметов
  • GET /api/economy/inventory - Получение инвентаря

Квесты

  • GET /api/quests/progress - Прогресс квестов
  • POST /api/quests/complete - Завершение квеста

Пользователи

  • GET /api/users/status - Статус пользователей
  • GET /api/users/:id/profile - Профиль пользователя

Сообщения

  • GET /api/messages/:contactId - Получение сообщений
  • POST /api/messages/send - Отправка сообщения
  • POST /api/messages-read/:contactId - Отметка сообщений как прочитанных

WebSocket события

Клиент → Сервер

  • playerMovement - Движение игрока
  • interiorChange - Смена интерьера
  • economy:getBalance - Запрос баланса
  • economy:getInventory - Запрос инвентаря
  • economy:updateStats - Обновление статистики
  • economy:removeItem - Удаление предмета
  • voiceChatToggle - Переключение голосового чата

Сервер → Клиент

  • economy:balanceChanged - Изменение баланса
  • economy:inventory - Обновление инвентаря
  • gameTime:update - Обновление игрового времени
  • us - Обновление статуса пользователей

Установка и запуск

Зависимости

npm install

Переменные окружения

Создайте файл .env в корне проекта:

# Сервер
PORT=4000
NODE_ENV=development

# База данных
DB_HOST=localhost
DB_PORT=5432
DB_USER=your_username
DB_PASS=your_password
DB_NAME=your_database

# JWT
JWT_SECRET=your_jwt_secret

Запуск

# Обычный запуск
node server.js

# Через PM2
pm2 start ecosystem.config.js

# В режиме разработки
npm run dev

База данных

Основные таблицы

users

  • id - Уникальный идентификатор
  • username - Имя пользователя
  • email - Email адрес
  • password_hash - Хеш пароля
  • created_at - Дата создания

interiors

  • id - Уникальный идентификатор
  • name - Название интерьера
  • glb_path - Путь к 3D модели
  • spawn_x, spawn_y, spawn_z - Координаты входа
  • exit_x, exit_y, exit_z - Координаты выхода

city_objects

  • id - Уникальный идентификатор
  • name - Название объекта
  • interior_id - Ссылка на интерьер
  • position_x, position_y, position_z - Позиция в мире

organizations

  • id - Уникальный идентификатор
  • name - Название организации
  • type - Тип организации
  • menu - JSON с меню организации

inventory

  • id - Уникальный идентификатор
  • user_id - Ссылка на пользователя
  • item_id - Ссылка на предмет
  • quantity - Количество

Безопасность

JWT токены

  • Используются для аутентификации
  • Хранятся в localStorage клиента
  • Передаются в заголовке Authorization

Валидация данных

  • Проверка входных данных
  • Санитизация SQL запросов
  • Защита от SQL инъекций

CORS

  • Настроен для разрешения запросов с клиента
  • Ограничен по доменам в продакшене

Мониторинг и логирование

PM2

  • Управление процессами
  • Автоперезапуск при сбоях
  • Логирование

Логи

  • Логирование ошибок
  • Логирование API запросов
  • Логирование WebSocket событий

Масштабирование

Кластеризация

  • Поддержка нескольких процессов через PM2
  • Балансировка нагрузки
  • Общие WebSocket соединения

Кэширование

  • Redis для кэширования данных
  • Кэширование статических файлов
  • Кэширование результатов запросов

Развертывание

Docker

FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 4000
CMD ["node", "server.js"]

Nginx

Настройте Nginx для проксирования API запросов на порт 4000.

SSL

Настройте HTTPS для безопасного соединения.

Тестирование

Unit тесты

npm test

Интеграционные тесты

npm run test:integration

Нагрузочное тестирование

npm run test:load

Отладка

Логи

  • Проверьте логи PM2: pm2 logs
  • Проверьте логи приложения в консоли

База данных

  • Проверьте подключение к БД
  • Выполните тестовые запросы

WebSocket

  • Проверьте подключение клиента
  • Проверьте события в консоли браузера

Поддержка

При возникновении проблем:

  1. Проверьте логи сервера
  2. Проверьте подключение к базе данных
  3. Проверьте конфигурацию
  4. Создайте issue в репозитории