我正在尝试实现 Azure SignalR 服务,以促进桌面、asp.net-core 和 xamarin.ios 应用程序之间的双向消息传递。
我在Hub
这里根据微软的文档创建了一个:
https ://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-2.2
中心:
public class ChatHub : Hub
{
public Task SendMessage(string user, string message)
{
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
当用户连接到集线器时,我将用户的连接添加到组,如下所示:https ://docs.microsoft.com/en-us/aspnet/core/signalr/groups?view=aspnetcore-2.2
添加到组:
public async Task AddToGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has joined the group {groupName}.");
}
public async Task RemoveFromGroup(string groupName)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has left the group {groupName}.");
}
发送消息时,它有一个组名作为参数,我想在将消息发送到任何注册客户端之前检查提供的组是否有任何连接,如果没有连接,我想发送一个推送通知(已经有推送通知的工作代码)
发送带有通知回退的消息:
public class ChatHub : Hub
{
public Task SendMessage(string groupName, string user, string message)
{
var group = Clients.Group(groupName);
// todo: how to check if we have any open connections in this group?
if(group.Conections.Count > 0)
{
return group.SendAsync("ReceiveMessage", user, message);
}
else
{
// todo: run code to send push notification or anything else you might want to do
}
}
}
问题:我看不到任何方法可以通过可用的 api 检查组中当前的连接数(如果我错了,请纠正我)
我看到该组Microsoft.AspNetCore.SignalR.Internal.GroupProxy<ChatHub>
在运行时返回,没有公共方法。内部私有变量确实包括_groupName
并且_lifeTimeManager
在生命周期管理器中_clientConnectionManager
,我可以看到它们在连接时有客户端连接,但我无法访问其中任何一个,我使用的是Microsoft.Azure.SignalR
(1.0.4) Nuget 包。有谁知道我想用这个 SDK 做什么,如果可以,我该怎么做?