尝试.NetCore 3.x SignalR

本文详细介绍了ASP.NET Core SignalR的使用方法,包括创建Hub中心、配置SignalR服务、实现客户端连接及交互。SignalR是一个强大的库,允许服务器即时推送内容到客户端,适用于游戏、社交网络、地图应用等高频率更新场景。

1、什么是 SignalR?

ASP.NET Core SignalR 是一个开源库,它简化了向应用程序添加实时 web 功能的功能。 实时 Web 功能使服务器端代码能够即时将内容推送到客户端。
适用场景:

  • 需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖、地图和 GPS 应用。
  • 仪表板和监视应用。 示例包括公司仪表板、即时销售更新或旅行警报。
  • 协作应用。 协作应用的示例包括白板应用和团队会议软件。
  • 需要通知的应用。 社交网络、电子邮件、聊天、游戏、旅行警报和很多其他应用都需使用通知。
    详情介绍详见官网:https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-3.1

2、创建Hub中心

2.1 Hub集线器介绍

Hub集线器的结构如图所示:
Hub介绍

  • OnConnectedAsync方法:客户端连接的时候事件方法
  • OnDisconnectedAsync方法:客户端断开连接的时候事件方法
  • Clients对象:服务器和客户端之间的通信对象
  • Context对象:该对象是当前请求的上下文对象,例如包含连接Id、用户身份信息等等
2.2 创建自定义集线器
internal class MyCore31Hub : Hub
{
   
   
    static IDictionary<string, ClientInfo> _clients;
    static MyCore31Hub()
    {
   
   
        _clients = new Dictionary<string, ClientInfo>();
    }
    public async override Task OnConnectedAsync()
    {
   
   
        var connid = Context.ConnectionId;
        var httpContext = Context.GetHttpContext();
        httpContext.Request.Query.TryGetValue("groupId", out StringValues groupid);
        httpContext.Request.Query.TryGetValue("userId", out StringValues userId);
        httpContext.Request.Query.TryGetValue("ip", out StringValues ip);
        if (!userId.Equals(StringValues.Empty))
        {
   
   
            if (_clients.ContainsKey(userId))
            {
   
   
                _clients.Remove(userId);
            }
            _clients.Add(userId, new ClientInfo()
            {
   
   
                ConnectionId = connid,
                GroupId = groupid,
                UserId = userId,
                Ip = ip
            });
            await Groups.AddToGroupAsync(connid, groupid);
            await SendConnection(groupid, new 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值