sse-format

This commit is contained in:
2023-10-19 17:43:00 +03:00
parent 8473694757
commit 5cf79bf531
5 changed files with 106 additions and 66 deletions

View File

@@ -12,14 +12,23 @@
### Как это работает
При каждом обращении к `/connect` создаётся отдельная асинхронная задача с подписками на Redus PubSub каналы
- `new_reaction`
- `new_shout`
- `followers:<author_id>`
При каждом обращении к `/connect` создаётся отдельная асинхронная задача с подписками на Redus PubSub каналы, позволяя пользователям получать только те уведомления, которые предназначены непосредственно для них.
Каналы Redis:
- `reaction`
- `shout`
- `follower:<author_id>`
- `chat:<chat_id>`
После подписки на эти каналы, сервис начинает пересылать сообщения из этих каналов. Он пересылает только те сообщения, которые предназначены пользователю, подписавшемуся на Server-Sent Events (SSE) по адресу `/connect`. Для авторизации подписки используется токен, который передается в заголовке `Authorization`.
Сервис пересылает сообщения из этих каналов, которые предназначены пользователю, подписавшемуся на 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