【发布时间】: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 也是如此。它不会抛出任何异常,但客户端没有收到消息
【问题讨论】:
-
您也可以发布协商功能吗?我在看另一个java示例,也看看它。也许它可以帮助你:github.com/anthonychu/captionr/blob/…
-
感谢您的回复;当然;也更新了协商方法
-
在我看来问题是您没有在协商函数中传递用户 ID
-
但在协商完成之前我不会有 connectionId..