我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 依赖项?