Как отправить сообщение конкретному пользователю только по идентификатору пользователя в Azure signalr?

#asp.net-core #signalr #signalr.client #asp.net-core-signalr #azure-signalr

Вопрос:

Привет, я работаю в azure SignalR. Я настроил отправку сообщения определенному пользователю с помощью комбинации идентификатора подключения и идентификатора пользователя, и это идеально подходит для меня.

 public class UserConnectionManager : IUserConnectionManager
        private static Dictionary<string, List<string>> userConnectionMap = new Dictionary<string, List<string>>();
        private static string userConnectionMapLocker = string.Empty;
        public void KeepUserConnection(string userId, string connectionId)
        {
            lock (userConnectionMapLocker)
            {
                if (!userConnectionMap.ContainsKey(userId))
                {
                    userConnectionMap[userId] = new List<string>();
                }
                userConnectionMap[userId].Add(connectionId);
            }
        }
 

Для меня эта реализация работает идеально. Теперь я развернул свое приложение в kubernetes с двумя блоками, так что список, который я использовал для хранения идентификаторов соединений, статичен и соответствует поведению сеанса. Так что это не работает с двумя капсулами.

 [Route("Push")]
        [HttpPost]
        public async Task<ActionResult> Push(Failure Failure)
        {
          var connections = _userConnectionManager.GetUserConnections(Failure.UserId);
            if (connections != null amp;amp; connections.Count > 0)
            {
                foreach (var connectionId in connections)
                {
                    await _notificationUserHubContext.Clients.Client(connectionId).SendAsync("MyMessage", Failure);
                }
            }
      return ok();
}
 

Поэтому я не хочу создавать комбинацию connectioid и userid. Я хочу просто отправить сообщение пользователю только по идентификатору пользователя. Однако я попытался подойти ниже

ждите _notificationUserHubContext.Клиенты.Пользователь(Сбой.Идентификатор пользователя).SendAsync(«MyMessage», mapDataResponseSuccess);

Этот фрагмент кода не отправляет сообщения на указанный идентификатор пользователя. Может ли кто-нибудь помочь мне отправить сообщение конкретному пользователю только по идентификатору пользователя? Любая помощь будет признательна. Спасибо

Комментарии:

1. Вместе с вашим фрагментом кода, похоже, у одного пользователя может быть еще один разговор, как вы использовали Dictionary<string, List<string>> для сопоставления отношений между пользователем и разговором. Поэтому я боюсь, что невозможно использовать идентификатор пользователя только для отправки сообщения в конкретный разговор. Я что-то неправильно понял в каком-то месте?

2. Я использую комбинацию идентификатора пользователя и идентификатора подключения, и текущая реализация работает. Но то, что я ищу, сейчас я не хочу иметь комбинацию с идентификатором подключения и просто пользователю, которому я хочу отправлять сообщения

3. Мой коллега сказал мне, что этот документ может вам помочь, а также сказал мне, что служба azure signalr предназначена для вашего сценария.

4. Большое спасибо, крошка Ван, я просмотрю документацию