想象一下,使用SignalR的两个浏览器客户端之间有一个聊天Web应用程序.一个客户做出意外F5命中的最佳方法是什么?
这里描述了使用cookie和自定义SignalR IConnectionIdFactory的策略.但该文章的作者说"SignalR团队不推荐这一行动".那么推荐的架构是什么?
您可以在客户端连接时将临时连接ID映射到永久用户ID /名称(可能存储在您的数据库中).请参阅ShootR示例(这是我上次检查过的).例如,您可以保留一个ConcurrentDictionary对象,这些对象表示您跟踪活动用户的用户,并将它们与其连接ID相关联OnConnected(并将其还原OnDisconnected)与此类似:
private static readonly ConcurrentDictionary<string, User> Users
= new ConcurrentDictionary<string, User>();
public override Task OnConnected() {
string userName = Context.User.Identity.Name;
string connectionId = Context.ConnectionId;
var user = Users.GetOrAdd(userName, _ => new User {
Name = userName,
ConnectionIds = new HashSet<string>()
});
lock (user.ConnectionIds) {
user.ConnectionIds.Add(connectionId);
}
return base.OnConnected();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4829 次 |
| 最近记录: |