当用户断开连接时,signalr 中有没有办法从列表中删除该用户?

Is there a way in signalr to remove a user from a list when that user disconnects?

我正在用 signalr 制作一个小聊天应用程序,当用户点击加入服务器时,该用户会添加到 ConnectedUsers 列表中。

但是我应该如何从列表中删除特定用户并通知其他客户端该用户已断开连接?

ChatHub.cs

static List<User> ConnectedUsers = new List<User>();

public async Task Join(string name) {

            var id = Context.ConnectionId;
            ConnectedUsers.Add(new User {ID = id, Name = name});
            await Clients.Caller.SendAsync("update", "You have connected to the server.");
            await Clients.Others.SendAsync("update", name + " has joined the server.");
            await Clients.All.SendAsync("update-people", JsonConvert.SerializeObject(ConnectedUsers));
        }

public override async Task OnDisconnectedAsync(Exception exception)
        {
            var _user = ConnectedUsers[Convert.ToInt32(Context.ConnectionId)];
            await Clients.All.SendAsync("test", _user);
            //ConnectedUsers.Remove();
            return base.OnDisconnectedAsync(exception);
        }

User.cs

public class User
    {
        public string ID { get; set; }
        public string Name { get; set; }
    }

我希望用户从 ConnectedUsers 列表中删除并通知其他客户端用户断开连接,但我不能在 OnDisconnectedAsync 的覆盖中使用 await SendAsync。

OnDisconnectedAsync 函数中,在您的 ConnectedUsers 中找到断开连接的用户(您之前已将 ConnectionId 分配给用户 ID)并从列表中删除该对象。之后广播更新了用户列表。

示例:

public override Task OnDisconnectedAsync(Exception exception)
    {
        var itemToRemove = ConnectedUsers.Single(r => r.ID == Context.ConnectionId);
        ConnectedUsers.Remove(itemToRemove);

        Clients.Others.SendAsync("update", itemToRemove.Name + " has left the server.");
        Clients.All.SendAsync("update-people", JsonConvert.SerializeObject(ConnectedUsers));
        return base.OnDisconnectedAsync(exception);
    }