如何从用户id在信号集线器内获得连接id

本文关键字:id 连接 集线器 用户 信号 | 更新日期: 2023-09-27 18:03:34

我有一个具有如下功能的信号集线器

public void SendSurveyNote(int surveyId,List<string> users){}

这里我想将列表中的所有用户添加到组"Survey_" + surveyId中,然后向该组发送消息。但是我只有用户id,但是加入组需要连接id。那我怎么能做到呢?另外,我想知道在没有组的情况下向每个用户发送消息是否会造成性能问题?

当我像这样添加一个新的调查时,我调用上面的函数

private static HubConnection hubConnection = new HubConnection(ConfigurationManager.AppSettings["BaseUrl"]);
private static IHubProxy hubProxy = hubConnection.CreateHubProxy("myHub");
await hubConnection.Start();
hubProxy.Invoke("SendSurveyNote", model.Id, users);

谢谢

如何从用户id在信号集线器内获得连接id

您可以访问Context中的连接ID。您将需要在OnConnected中建立组。在您的中心上观察以下实现,我们将其称为MyHub。我们还将按Context.User.Identity.Name分组,以便为每个用户建立一个唯一的组,但这可以是您希望分组的任何值。

public class MyHub: Hub
{
    public override Task OnConnected()
    {
        Groups.Add(Context.ConnectionId, Context.User.Identity.Name)
        return base.OnConnected();
    }
}

参见SignalR中使用组获取更多信息