클라이언트가 연결될 때 임시 연결 ID를 영구 사용자 ID/이름 (DB에 저장 될 수 있음)에 매핑 할 수 있습니다. 이 작업을 수행하는 ShootR example을 참조하십시오 (적어도 마지막으로 확인했을 때). 이와 유사한 예를 들어, 당신이 활성 사용자를 추적하는 사용자를 나타내는 개체의 ConcurrentDictionary을 유지할 수 있고 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();
}