quota guarded uploader and thumbs generator for progressive image load
Go to file
2024-04-08 20:02:13 +03:00
.gitea/workflows feat: add in CI pipe line to dokku@v2.discours.io/presence 2024-01-27 20:49:22 -03:00
src sentry-connectedd 2024-04-08 10:17:14 +03:00
.gitignore init-rust 2023-09-28 02:08:48 +03:00
Cargo.lock upgrade-versiong 2024-04-08 19:52:41 +03:00
Cargo.toml upgrade-versiong 2024-04-08 19:52:41 +03:00
Dockerfile dockerfile-fix 2024-04-08 20:02:13 +03:00
nginx.conf.sigil sigil-fix 2024-01-15 11:25:37 +03:00
README.md sse-format 2023-10-19 17:43:00 +03:00

Presence

"Присутствие" - это сервер для пересылки сообщений в реальном времени. Текущая версия использует SSE-транспорт.

ENV

  • API_BASE
  • AUTH_URL
  • REDIS_URL

Как это работает

При каждом обращении к /connect создаётся отдельная асинхронная задача с подписками на Redus PubSub каналы, позволяя пользователям получать только те уведомления, которые предназначены непосредственно для них.

Каналы Redis:

  • reaction
  • shout
  • follower:<author_id>
  • chat:<chat_id>

Сервис пересылает сообщения из этих каналов, которые предназначены пользователю, подписавшемуся на Server-Sent Events (SSE) по адресу /connect. Для авторизации подписки используется токен, который передается клиентом в заголовке Authorization, или в пути /connect/{token}, или в переменной запроса /connect/?token={token}.

При завершении подключения, все подписки автоматически отменяются, так как они связаны с конкретным подключением. Если пользователь снова подключается, процесс подписки повторяется.

Формат сообщений межсервисной коммуникации

Между сервисами пересылаются целые сущности и типизация действий с ними, поля стандартного redis-сообщения:

  • action наименование операции, примеры: "create" | "delete" | "update" | "join" | "left"
  • payload json одной из сущностей: Reaction | Shout | Author | Chat | Message