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);
}
}
建立了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]