【问题标题】:Sending message to Group isn't working in Azure SignalR向组发送消息在 Azure SignalR 中不起作用
【发布时间】:2020-04-01 05:49:27
【问题描述】:

我正在使用 Azure Functions 开发 Azure SignalR。广播场景运行良好;但是,向群组发送消息不起作用。以下是 Azure Functions 端的代码:

以下是协商方法

@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
        @HttpTrigger(
            name = "req",
            methods = { HttpMethod.POST },
            authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
        @SignalRConnectionInfoInput(
            name = "connectionInfo",
            hubName = "chat") SignalRConnectionInfo connectionInfo) {

    return connectionInfo;
}

@FunctionName("subscribeToGroup")
@SignalROutput(name = "$return", hubName = "chat")
public SignalRGroupAction subscribeToGroup(
    @HttpTrigger(
        name = "req",
        methods = { HttpMethod.POST },
        authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req) throws Exception {
    Map<String, String> requestBody = new ObjectMapper().readValue(req.getBody().get(), new TypeReference<HashMap<String, String>>() {});
    return new SignalRGroupAction("add", "groupName", requestBody.get("userId")); //userId is the connectionId sent from client side
}

然后触发向群组发送消息:

@FunctionName("sendMessageToChannel")
@SignalROutput(name = "$return", hubName = "chat")
public SignalRMessage sendMessageToChannel(
    @HttpTrigger(
        name = "req",
        methods = { HttpMethod.POST },
        authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req) throws Exception {

    Map<String, String> messageContainer = new HashMap<>();
    messageContainer.put("sender", "1234");
    messageContainer.put("text", "Hello Group13");

    SignalRMessage message = new SignalRMessage("groupChannel", messageContainer);
    message.groupName = "groupName";

    return message;
}

在客户端;我正在听 groupChannel 目标;即

connection.on('groupChannel', function(message) {
    console.log(message);
    $("#groupMessages").append(message.text + "<br/>");
});

不知道我在这里做错了什么。对于广播它工作得很好。 subscribeToGroup 方法也不会抛出任何异常,sendMessageToChannel 也是如此。它不会抛出任何异常,但客户端没有收到消息

【问题讨论】:

标签: azure signalr


【解决方案1】:

感谢@Thiago Custodio.. 它奏效了。问题是我没有在协商过程中发送 userId。进行以下更改后;成功了:

@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
        @HttpTrigger(
            name = "req",
            methods = { HttpMethod.POST },
            authLevel = AuthorizationLevel.ANONYMOUS,
            route = "{userId}/negotiate") HttpRequestMessage<Optional<String>> req,
        @SignalRConnectionInfoInput(
            name = "connectionInfo",
            hubName = "chat",
            userId = "{userId}") SignalRConnectionInfo connectionInfo) {

    return connectionInfo;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多