Отправка сообщения группе пользователей в службе 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> выход
Другие вопросы по тегам