我有这个中心:
public class NotificationHub : Hub<INotificationHub>
{
private readonly static ConnectionMapping<User> connections = new ConnectionMapping<User>();
public override Task OnConnected()
{
var user = GetUser();
connections.Add(user, Context.ConnectionId);
Groups.Add(Context.ConnectionId, user.GroupId.ToString());
return base.OnConnected();
}
public string GetConnectionId(User user)
{
return connections.GetConnections(user).First();
}
private User GetUser() {}
}
在控制器中我正在做:
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.Groups(user.GroupId.ToString()).Notify();
但以上内容会发送给该组的所有用户。如何将其发送给当前发出请求的用户?
注意: 我在集线器外面调用这个方法。
答案 0 :(得分:0)
要将特定更新发送到特定客户端,您需要connectId。如你所知,该小组正在进行广播。
由于您在单独的控制器中从集线器外部进行访问,因此您无权访问当前的Context.ConnectionId。
但是,由于您确实拥有hubContext,如果您可以使用以下内容保存要发送更新的用户的connectionId,则可以向特定连接发送更新:
context.Clients.Client(connectionid).Notify()
在您的情况下,将GetConnectionId设为静态:
public static string GetConnectionId(User user)
{
return connections.GetConnections(user).First();
}
然后,将通知发送给用户的特定连接:
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.Groups(NotificationHub.GetConnectionId(user)).Notify();
这应该有效。