我写了下面的代码,希望将用户添加到组中,同时向该用户所在的组发送消息。我可以在 Azure 门户上看到每个 signalR 刀片建立的连接,但我无法断定用户在返回此函数后是否已成为该组的成员。
[Function("OnConnected")]
[SignalROutput(HubName = "myhub")]
public async Task<object[]> OnConnectedAsync([SignalRTrigger("myhub", "connections", "connected")] SignalRInvocationContext invocationContext)
{
var username = "userA";
var groupName = "groupA";
return
[
new SignalRGroupAction(SignalRGroupActionType.Add)
{
GroupName = groupName,
UserId = username
},
new SignalRMessageAction("NewUserConnected")
{
GroupName = groupName,
Arguments = [userName]
}
];
}
上述函数的实现是否展示了将用户添加到组并同时向组发送消息的正确方法?
注意:在编写此代码之前,我尝试通过以下代码行将用户添加到组,同时具有上面的函数报告
对象,但它引发了异常:SignalRMessageAction
await UserGroups.AddToGroupAsync(userName, groupName);
显然 signalR 的 SDK 不喜欢上面在上游上下文中的行。
下面的代码将用户添加到组并向该组发送消息。 Azure Function
SendMessage
旨在处理 POST 请求并使用输出绑定将消息发送到名为“myGroup”的 SignalR 组。
它读取请求正文以提取
userId
和 message
。
它将
userId
添加到 SignalR 组“myGroup”。
它将
message
发送到 SignalR 组“myGroup”。
Azure Functions SignalR 服务输出绑定参考。
将用户添加到组并向该组发送消息:
[FunctionName("SendMessage")]
public static async Task<IActionResult> SendMessage(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[SignalR(HubName = "sampathravi90ravi")] IAsyncCollector<SignalRGroupAction> signalRGroupActions,
[SignalR(HubName = "sampathravi90ravi")] IAsyncCollector<SignalRMessage> signalRMessages,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
string userId = data?.userId;
string message = data?.message;
if (userId != null && message != null)
{
// Add user to group
await signalRGroupActions.AddAsync(
new SignalRGroupAction
{
UserId = userId,
GroupName = "myGroup",
Action = GroupAction.Add
});
// Send message to group
await signalRMessages.AddAsync(
new SignalRMessage
{
GroupName = "myGroup",
Target = "newMessage",
Arguments = new[] { message }
});
log.LogInformation($"Sent message: {message} to group myGroup for user {userId}");
return new OkResult();
}
else
{
log.LogError("Either userId or message not found in the request body.");
return new BadRequestObjectResult("Please pass userId and message in the request body.");
}
}
{
"userId": "userId1",
"message": "Hello, world!"
}
输出: