admin 发表于 2023-12-24 10:25:51

Microsoft.AspNetCore.SignalR的用法汇总

public override async Task OnConnectedAsync()
{
    // 在这里可以处理客户端连接时的逻辑
    await base.OnConnectedAsync();

    // 连接建立时将连接ID添加到对应的房间列表中
    connectionId = Context.ConnectionId;

    if (connections.TryGetValue(connectionId, out List<string>? conns))
    {
      conns.Add(Context.ConnectionId);
    }
    else
    {
      connections.Add(connectionId, );
    }
    //读取办法如下
    foreach (var connection in connections)
    {
      Console.WriteLine(connection.Key);
    }
}

admin 发表于 2023-12-24 10:40:41

建立了connectionid,用户和房间怎么关联?

在SignalR中,你可以使用自定义的数据结构或字典来建立用户和房间之间的关联。
一种常用的方法是创建一个Dictionary<string, string>,其中键(即key)是用户的Connection ID,值(即value)是用户所在的房间名称。
在用户加入房间时,你可以将用户的Connection ID与房间名称进行关联,并将其添加到字典中。例如:

// 创建一个用于存储用户和房间关联关系的字典
Dictionary<string, string> userRoomMap = new Dictionary<string, string>();

// 当用户加入房间时调用的方法
public async Task JoinRoom(string roomName)
{
    // 获取当前连接的Connection ID
    string connectionId = Context.ConnectionId;

    // 将Connection ID与房间名称进行关联,并添加到字典中
    userRoomMap = roomName;

    // 其他逻辑:根据业务需求处理用户加入房间的操作
}


与上对应,当用户断开连接时,你可以查找与断开连接的Connection ID相关联的房间,并执行相应的操作。例如:

// 当用户断开连接时调用的方法
public override async Task OnDisconnectedAsync(Exception? exception)
{
    // 获取断开连接的Connection ID
    string connectionId = Context.ConnectionId;

    // 如果在字典中找到了与Connection ID相关联的房间名称
    if (userRoomMap.TryGetValue(connectionId, out string roomName))
    {
      // 其他逻辑:根据业务需求处理用户离开房间的操作
    }

    // 其他逻辑:根据业务需求处理用户断开连接的操作

    await base.OnDisconnectedAsync(exception);
}


页: [1]
查看完整版本: Microsoft.AspNetCore.SignalR的用法汇总