Как реализовать пользовательские c данные в реальном времени на сервере Blazor? - PullRequest
0 голосов
/ 28 мая 2020

Я пытался в течение нескольких дней и боролся с лучшими практиками для этого - есть идеи?

Пример надуманного личного сообщения:

  • Несколько пользователей вошли в Blazor server
  • Сервер подписывается на шину событий / очередь сообщений для получения NewMessageEvent
  • Обновляется только пользователь, который является предполагаемым получателем.

Я могу создать singleton для подписки на очередь сообщений. Затем я могу использовать синглтон, который я вводю в требуемый компонент blazor, чтобы добавить сообщение в список и выдать событие stateHasChanged.

Это обновит все подключенные клиенты (не идеально, служба, введенная в компоненты, должна

Варианты на данный момент:

  • Я мог проверить получателя сообщения внутри компонента blazor, но мне кажется, что это не то место
  • Подпишитесь на очередь один раз на канал (очередь по-прежнему содержит все сообщения)

То, что я надеялся сделать, возможно, было создать локатор службы на основе идентификатора схемы и подключенного пользователя с помощью обработчика схемы , и вызовите такую ​​функцию, как: NewMessageReceivedFor (userId), если она найдет согласованную схему, затем вызовите сервисную функцию с заданной областью. конструктор) какой-либо формой GetRequiredService, но могу ли я получить эту службу с ограниченной областью действия, указав идентификатор схемы?

Сейчас я чувствую, что я либо на 90% там, либо в неправильном лесу, не говоря уже о том, что поднялся не на то дерево.

1 Ответ

1 голос
/ 28 мая 2020

У вас может быть служба Singleton для обработки всех сообщений, а затем служба Scoped, которая подписывается на событие в Singleton, а затем запускает собственное событие только в том случае, если сообщение предназначено для текущего пользователя (вам понадобится служба зарегистрирован как Scoped, чтобы получить текущий идентификатор пользователя).

Таким образом, каждый пользователь будет получать уведомление только тогда, когда сообщение предназначено для него.

Не забудьте реализовать IDisposable в Scoped сервис, поэтому вы можете отказаться от подписки на сервис Singleton.

...