SHiNE-server/TODO_Будущие_доработки.md

42 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TODO: Будущие доработки
## 1) Полный переход на `ReceiveOutcomingMessage`
- Сейчас в UI используется `ReceiveOutcomingMessage` с fallback на `SendMessagePair`.
- Fallback нужен только временно для совместимости со старыми серверами.
- После обновления всех серверов:
- убрать вызов `SendMessagePair` из UI,
- убрать регистрацию `SendMessagePair` на сервере (оставить только `ReceiveOutcomingMessage`).
## 2) Реальная мультисерверная доставка
- Сейчас фактически предполагается 1 сервер на пользователя.
- Нужно реализовать штатную мультисерверную схему:
- пересылка исходящих сообщений между серверами пользователя A,
- пересылка входящих сообщений между серверами пользователя B,
- дедупликация на уровне БД для затухания дублей.
## 3) Надёжная доставка при перезапуске сервера
- Сейчас возможен сценарий: запись уже сохранена в БД, но сервер не успел переслать дальше из-за перезапуска.
- Нужно добавить механизм «store + guaranteed forward»:
- очередь/аутбокс для межсерверной пересылки,
- фоновый ретрай до подтверждения отправки,
- корректная остановка (graceful shutdown) с дожатием критичных задач.
## 4) Политика идемпотентности
- Сохранить принцип: пара (`incoming`, `outgoing`) пишется одной транзакцией, либо обе, либо ни одной.
- Не допускать частичного состояния, при котором в БД есть только один блок пары.
## 5) Наблюдаемость и аналитика
- Добавить метрики по доставке:
- количество дублей,
- количество успешных вставок пар,
- доля доставок в WS/push,
- количество ретраев межсерверной пересылки.
## 6) Ограничение текущих звонков (важно)
- Сейчас звонки работают только в рамках одного сигнального сервера (или единого контура, где обе стороны уже подключены).
- Сценарий «пользователь A на своих серверах, пользователь B на других серверах» пока не поддержан.
- TODO на будущее:
- временная межсерверная авторизация/сессия для старта звонка,
- отправка сигнальных сообщений между разными серверами пользователей,
- аккуратное завершение временной сессии после установления/завершения звонка.