#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. Большое спасибо, крошка Ван, я просмотрю документацию