当前位置: 首页 > news >正文

ASP .NET Core 8实现实时Web功能

ASP.NET Core SignalR 是一个开放源代码库,可用于简化向应用添加实时 Web 功能。 实时 Web 功能使服务器端代码能够将内容推送到客户端。

以下是 ASP.NET Core SignalR 的一些主要功能:

  • 自动处理连接管理
  • 同时向所有连接的客户端发送消息。 例如聊天室
  • 向特定客户端或客户端组发送消息

SignalR 支持以下用于处理实时通信的技术(按正常回退的顺序):

  • WebSocket
  • Server-Sent 事件
  • 长轮询

ASP .NET Core中已经内置了SignalR了,所以使用起来很方便,只需创建Hub中心和启用配置下SignalR即可。

1、创建强类型中心

使用 SendAsync 的缺点在于,它依赖于字符串来指定要调用的客户端方法。 如果客户端中的方法名称拼写错误或缺失,则这会使代码可能出现运行时错误。

将ChatHub客户端方法提取到名为IChatClient接口中

/// <summary>
/// 聊天Hub客户端接口
/// </summary>
public interface IChatClient
{/// <summary>/// 客户端监听广播事件/// </summary>/// <param name="message">消息</param>/// <returns></returns>Task ReceiveBroadcast(string message);/// <summary>/// 客户端监听接收消息事件/// </summary>/// <param name="message">消息</param>/// <returns></returns>Task ReceiveMessage(string message);
}

创建强类型ChatHub 

/// <summary>
/// 聊天hub
/// </summary>
[Authorize]
public class ChatHub : Hub<IChatClient>
{/// <summary>/// 建立连接/// </summary>/// <returns></returns>public override async Task OnConnectedAsync(){await SendBroadcast(Context.UserIdentifier + ":online");await base.OnConnectedAsync();}/// <summary>/// 发送广播/// </summary>/// <param name="message">消息</param>/// <returns></returns>public async Task SendBroadcast(string message){await Clients.All.ReceiveBroadcast(message);}/// <summary>/// 发送消息/// </summary>/// <param name="targetUserId">目标用户</param>/// <param name="message">消息</param>/// <returns></returns>public async Task SendMessage(string targetUserId, string message){await Clients.User(targetUserId).ReceiveMessage(message);}/// <summary>/// 断开连接/// </summary>/// <param name="exception"></param>/// <returns></returns>public override async Task OnDisconnectedAsync(Exception? exception){await SendBroadcast(Context.UserIdentifier + ":offline");await base.OnDisconnectedAsync(exception);}
}

注: Clients.User(targetUserId)中targetUserId需要和授权令牌中ClaimTypes.NameIdentifier值一致,因为SignalR 使用与连接关联的 ClaimTypes.NameIdentifier 中的 ClaimsPrincipal 作为用户标识符。

 2、配置 SignalR 中心

 在Program.cs中调用 AddSignalR方法,以注册 SignalR 中心所需的服务

var builder = WebApplication.CreateBuilder(args);builder.Services.AddSignalR();var app = builder.Build();

Program.cs中调用 MapHub方法,以配置 SignalR 终结点

var app = builder.Build();app.MapHub<ChatHub>("/Chat");app.Run();

http://www.dtcms.com/a/283934.html

相关文章:

  • Python 网络爬虫 —— 提交信息到网页
  • AI算法之图像识别与分类
  • 电力载波通信技术(PLC)发展全解析:从历史演进到未来趋势
  • RabbitMQ概述和工作模式
  • 永磁同步电机MTPA与MTPV曲线具体仿真实现
  • Python学习之——序列化与反序列化
  • 常用的100个opencv函数
  • [RAG] LLM 交互层 | 适配器模式 | 文档解析器(`docling`库, CNN, OCR, OpenCV)
  • 加速度传感器方向校准方法
  • RGBA图片格式转换为RGB格式(解决convert转换的失真问题)
  • OpenCV中VideoCapture 设置和获取摄像头参数和Qt设计UI控制界面详解代码示例
  • (四)OpenCV——特征点检测与匹配
  • 分布式分片策略中,分片数量的评估与选择
  • MacOS安装linux虚拟机
  • GPU的barrier
  • OpenCV中常用特征提取算法(SURF、ORB、SIFT和AKAZE)用法示例(C++和Python)
  • Linux的Ext系列文件系统
  • 一文掌握Harbor的配额管理和GC机制
  • Kubernetes架构原理与集群环境部署
  • VMware Workstation Pro 17下载安装
  • C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
  • [yotroy.cool] 记一次 spring boot 项目宝塔面板部署踩坑
  • LeetCode|Day16|387. 字符串中的第一个唯一字符|Python刷题笔记
  • 高光谱相机(Hyperspectral Camera)
  • 虚拟内存管理-抖动和工作集
  • 告别手动报表开发!描述数据维度,AI 自动生成 SQL 查询 + Java 导出接口
  • Python暑期学习笔记3
  • 100201组件拆分_编辑器-react-仿低代码平台项目
  • 使用Proxy设计模式来增强类的功能:ToastProxy和DesktopToast的设计关系
  • suricata新增Mysql告警规则处理