Отправка сообщения группе пользователей в службе SignalR в функциях Azure
Просматривая документы для привязок SignalR, чтобы отправить сообщение указанному пользователю, вы включаете UserId
свойство сообщения как таковое -
[FunctionName("SendMessage")]
public static Task SendMessage(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")]object message,
[SignalR(HubName = "chat")]IAsyncCollector<SignalRMessage> signalRMessages)
{
return signalRMessages.AddAsync(
new SignalRMessage
{
// the message will only be sent to these user IDs
UserId = "userId1",
Target = "newMessage",
Arguments = new [] { message }
});
}
Этот пример взят прямо из документации, но комментарий подразумевает, что вы сообщаете несколько идентификаторов пользователей, даже если свойство является строкой, а не массивом.
Как бы вы указали несколько пользователей? (Если, например, они находятся в частном канале чата вместе) Или это ошибка в формулировке комментария, и вам нужно будет отправить сообщение для каждого пользователя?
С другими версиями SignalR я бы поместил их в группу, но привязки для этого не существуют для функций.
1 ответ
К сожалению, так же как и в документе, сейчас, с привязкой функции Azure, мы можем отправлять сообщения только одному пользователю или всем клиентам.
Смотрите код текущего расширения SDK Microsoft.Azure.WebJobs.Extensions.SignalRService
v1.0.0-preview1-10002. Это показывает, что расширение имеет только два метода SendToAll и SendToUser.
Task SendToAll(string hubName, SignalRData data);
Task SendToUser(string hubName, string userId, SignalRData data);
Комментарий смутил вас на самом деле для старого образца, автор забыл его изменить.
Хорошей новостью является то, что поддержка групповой работы находится в стадии разработки.
Групповые операции были представлены в последнем выпуске.
Теперь вы можете:
- Отправить сообщение группе, используя
GroupName
вSignalRMessage
- Добавить / удалить пользователя в группе, используя
IAsyncCollector<SignalRGroupAction>
выход