0

Redis用作背板,但我也使用 SQL 将用户映射到连接。这对我的 I/O 造成了影响——每次我通过集线器发送消息时,我都会这样做:

private readonly ConnectionService _connectionService;

public AppHub() {
   _connectionService = new ConnectionService();
}

public void SendClientNotification(string notification, string key) {
   List<string> navbarClients = _connectionService.GetConnections(key); // yuck
   foreach (string connectionId in navbarClients) {
       Clients.Client(connectionId).clientNotification(notification);
    }
}

这是哪里GetConnections

public List<string> GetConnections(string key) {
    using (DbContext db = new DbContext()) {
       return db.SignalConnections
            .Where(s => s.Key == key)
            .Select(s => s.ConnectionGuid)
            .ToList();
    }
}

我还做了一大堆 I/O 来定期删除不活动的连接。

SignalR 能否以某种方式推断用户名(例如 from User.Identity.Name)并自动处理映射和连接过期,以便我可以从 SignalR 实现中清除此 SQL 依赖项?

4

0 回答 0