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.pswp.cn/web/89588.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新版谷歌浏览器 内网安装 pdf无法预览

最新版谷歌浏览器 内网安装 pdf无法预览 谷歌下载地址 谷歌下载地址 不同的浏览器版本&#xff0c;兼容的js标准不一样 js标准也在不断升级&#xff0c;增加新的方法。

NX二次开发常用函数坐标转化UF_MTX4_csys_to_csys和UF_MTX4_vec3_multipl

一、UF_MTX4_csys_to_csys 1.1 函数名称 UF_MTX4_csys_to_csys1.2 函数中各参数解释&#xff1a;函数参数解释&#xff1a; 第1个参数为输入&#xff1a; 输入const double 双精度类型的参数&#xff0c;参数的变量格式为from_origin [ 3 ]&#xff0c;坐标系&#xff…

JAVA中的Collections 类

文章目录前言一、 排序方法 sort() 和 reverseOrder()1. sort(List<T> list)2.sort(List<T> list, Comparator<? super T> c)二、查找方法 max(), min()1.max(Collection<? extends T> coll)2.min(Collection<? extends T> coll)3.max(Collec…

统计学习方法

一、统计学习方法步骤 得到一个有限的训练数据集合确定学习模型的集合-假设空间确定模型选择的准则-策略实现求解最优模型的算法-算法通过学习方法选择最优模型利用学习的最优模型对新数据进行预测或分析 二、统计学习方法分类 三、统计学习的基本分类&#xff08;监督学习&a…

windows docker-01-desktop install windows10 + wls2 启用

windows10 安装 docker 版本信息确认 需要区分 windows 是 amd64 还是 arm64 powershell 中执行&#xff1a; > echo $env:PROCESSOR_ARCHITECTURE AMD64下载 官方 https://www.docker.com/products/docker-desktop/ 下载 windows amd64 下载好了直接安装。 如何验证…

Elasticsearch集群出现脑裂(Split-Brain)如何排查原因和处理?

Elasticsearch集群出现脑裂(Split-Brain)如何排查原因和处理? 1. 脑裂(Split-Brain)背景 定义:脑裂是指 Elasticsearch 集群由于网络分区(network partition)或其他原因分裂成多个独立的子集群,每个子集群认为自己是主集群,导致不同的子集群可能独立处理请求,造成数…

Apache Ignite 的 Pages Writes Throttling(页面写入节流)

&#x1f31f; 一、什么是 Checkpointing&#xff08;检查点机制&#xff09;&#xff1f; 在 Apache Ignite 中&#xff1a; 数据是先保存在内存中&#xff08;RAM&#xff09;&#xff0c;然后异步写入磁盘。当数据被修改时&#xff0c;它首先被更新在内存中的“页”上&#…

uni-app 学习笔记:使用深度选择器修改第三方库组件的样式

在uni-app中&#xff0c;深度选择器&#xff08;Deep Selector&#xff09;是一个非常重要的概念&#xff0c;它允许父组件穿透样式隔离&#xff0c;从而修改子组件的内部样式。1.什么是uni-app深度选择器深度选择器是一种CSS选择器&#xff0c;用于穿透组件的样式隔离机制&…

物联网IOT平台到底是啥

物联网IOT平台&#xff1a;万物互联的智慧中枢清晨&#xff0c;智能闹钟轻柔唤醒你&#xff0c;咖啡机自动开始冲泡&#xff1b;离家时&#xff0c;空调自动关闭&#xff0c;安防摄像头启动&#xff1b;办公室内&#xff0c;生产线传感器实时回传设备状态&#xff0c;仓库管理系…

MySQL详解二

MySQL详解二索引主键索引唯一索引普通索引组合索引全文索引主键选择约束索引实现B树聚集索引辅助索引索引存储innodb 体系结构最左匹配原则覆盖索引索引下推索引失效索引原则索引 数据库中的数据是以记录为单位的&#xff0c;如果一条一条进行查找&#xff0c;几十万数据就已经…

深度学习中的模型剪枝工具Torch-Pruning的使用

Torch-Pruning(TP)是一个结构化剪枝框架&#xff0c;源码地址&#xff1a;https://github.com/VainF/Torch-Pruning&#xff0c;最新发布版本v1.6.0&#xff0c;License为MIT。 TP支持对各种深度神经网络进行结构化剪枝。与通过掩码将参数设置为零的torch.nn.utils.prune不同&a…

力扣-121.买卖股票的最佳时机

121.买卖股票的最佳时机 class Solution {public int maxProfit(int[] prices) {int min prices[0];int max 0;for (int i 1; i < prices.length; i) {max Math.max(prices[i] - min, max);if (prices[i] < min) {min prices[i];}}return max;} }小结&#xff1a;贪…

lvs原理及实战部署

一、集群与分布式系统 1 集群 1-1概念 集群式架构是将多个相同或相似的节点组合在一起&#xff0c;形成一个逻辑上的 “整体”&#xff0c;对外提供统一的服务或资源。节点之间通常具有较高的同构性&#xff08;硬件、软件配置相似&#xff09;&#xff0c;且紧密协作。 1-2 三…

[Linux]如何設置靜態IP位址?

自從將Ubuntu Server 24.04 LTS作業系統建置在VM上後&#xff0c;逐漸導入一些容器和微服務器並使可由其他Client端來連接使用&#xff0c;其中包含AIGC模型和自動化工作流等服務&#xff0c;例如Open-WebUI和n8n。然而&#xff0c;若VM重新開機或路由器因故斷電等等狀態&#…

【Leecode 随笔】

文章目录题目一&#xff1a;盛最多水的容器题目描述&#xff1a;题目分析&#xff1a;解题思路&#xff1a;示例代码&#xff1a;深入剖析&#xff1a;题目二&#xff1a;最长无重复字符的子串题目描述&#xff1a;题目分析&#xff1a;解题思路&#xff1a;示例代码&#xff1…

Springboot项目应用PageInfo分页问题失效

使用github的pagehelper分页依赖<!-- 分页控件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.0</version><scope>compile</scope></dependency&…

【无标题】标准模型粒子行为与11维拓扑量子色动力学模型严格对应的全面论述

标准模型粒子行为与11维拓扑量子色动力学模型严格对应的全面论述标准模型粒子与拓扑结构的严格对应 mermaid graph LRsubgraph 标准模型粒子A[费米子] --> A1[夸克]A --> A2[轻子]B[玻色子] --> B1[规范玻色子]B --> B2[希格斯]endsubgraph 11维拓扑模型C[实体顶点…

SQL一些关于存储过程和使用的总结

存储过程&#xff1a;数据库里的 "定制工具箱"存储过程就像一个装满工具的箱子&#xff0c;你需要什么功能&#xff0c;就调用对应的工具。它是用 SQL 语句写好的一段程序&#xff0c;存储在数据库里&#xff0c;随时可以调用。创建存储过程 就像在工具箱里放新工具。…

springCloud -- 微服务01

目录 一、认识微服务 1.单体架构 2.微服务 3.SpringCloud 二、微服务拆分 1.服务拆分原则 2.服务调用 3. RestTemplate 三、服务注册和发现 1. 注册中心原理 2. 服务发现 2.1 服务注册 2.2 服务发现 四、OpenFeign 一、认识微服务 1.单体架构 单体架构就是整个项目中所有功能…

Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 论文阅读

用于动态场景去模糊的深度多尺度卷积神经网络 摘要 针对一般动态场景的非均匀盲去模糊是一个具有挑战性的计算机视觉问题&#xff0c;因为模糊不仅来源于多个物体运动&#xff0c;还来源于相机抖动和场景深度变化。为了去除这些复杂的运动模糊&#xff0c;传统的基于能量优化的…