弘帝企业智能建站系统交流平台

 找回密码
 立即注册
查看: 259|回复: 1

Microsoft.AspNetCore.SignalR的用法汇总

[复制链接]
发表于 2023-12-24 10:25:51 | 显示全部楼层 |阅读模式
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, [Context.ConnectionId]);
    }
    //读取办法如下
    foreach (var connection in connections)
    {
        Console.WriteLine(connection.Key);
    }
}
回复

使用道具 举报

 楼主| 发表于 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[connectionId] = 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);
}


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|弘帝企业智能建站系统 ( 皖ICP备07503252号 )

GMT+8, 2024-4-28 14:20 , Processed in 0.061207 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表