quota guarded uploader and thumbs generator for progressive image load
Go to file
2023-10-19 17:43:00 +03:00
.gitea/workflows feat: added to CI/CD pipline 2023-10-15 15:42:56 -03:00
src sse-format 2023-10-19 17:43:00 +03:00
.gitignore init-rust 2023-09-28 02:08:48 +03:00
Cargo.lock sse-format 2023-10-19 17:43:00 +03:00
Cargo.toml sse-format 2023-10-19 17:43:00 +03:00
Dockerfile debug: rm LetsEncrypt dir 2023-10-12 10:49:27 -03:00
nginx.conf.sigil Merge branch 'main' of https://dev.discours.io/discours.io/presence 2023-10-19 12:16:12 +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