2

我有一个通过 SignalR 接收消息的客户端。它工作正常,但更像是广播。我希望能够向特定客户端发送消息。是否可以使用 Azure 函数 C# 来做到这一点?这是我的协商功能示例。

  [FunctionName("Negotiate")]
    public static SignalRConnectionInfo NegotiateSignalR(
      [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
      [SignalRConnectionInfo(HubName = "notifications")] SignalRConnectionInfo connectionInfo)
    {
        return connectionInfo;
    }
4

2 回答 2

1

你可以这样做。

[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 this user ID
            UserId = "userId1",
            Target = "newMessage",
            Arguments = new [] { message }
        });
}

参考:

发送给用户

于 2020-06-15T06:04:58.803 回答
1
 [FunctionName("Negotiate")]
    public static SignalRConnectionInfo NegotiateSignalR(
      [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req,
      [SignalRConnectionInfo(HubName = "notifications", UserId = "{headers.x-ms-signalr-userid}")] SignalRConnectionInfo connectionInfo)
    {
        return connectionInfo;
    }

我必须在 SignalRConnectionInfo Binding 中再添加一个属性 UserId,并且 FE 客户端必须在标头中传递用户 ID。

x-ms-signalr-userid:{userid}

通过此更改,客户端和信号器创建的连接与用户 ID 相关联,您可以将消息发送给特定用户。

于 2020-06-18T10:52:39.217 回答