新闻中心
C# 如何使用 SignalR 实现实时通信_C# SignalR 实时通信开发指南
SignalR是ASP.NET提供的实时通信库,通过Hub模型实现服务器主动推送。首先创建ChatHub类处理消息,注册SignalR服务并映射/chathub路由,客户端使用HubConnection连接,调用InvokeAsync发送消息,On接收消息,支持分组、认证和重连机制,适用于聊天、通知等场景。

SignalR 是 ASP.NET 提供的一个强大库,用于简化服务器与客户端之间的实时通信。使用 C# 和 SignalR,你可以轻松实现聊天应用、实时通知、数据仪表盘等需要即时更新的功能。下面是一个实用的开发指南,帮助你快速上手 C# 中的 SignalR 实现。
1. 什么是 SignalR?
SignalR 是一个开源库,允许服务器主动向连接的客户端推送信息。它自动选择最佳通信方式(如 WebSockets、Server-Sent Events 或长轮询),开发者无需关心底层协议切换。
核心特点包括:
- 自动连接管理
- 支持多种客户端(浏览器、移动端、桌面应用)
- 简单易用的 Hub 模型进行方法调用
2. 创建 SignalR 服务端(ASP.NET Core)
以 ASP.NET Core 项目为例,搭建一个基础的 SignalR 服务。
步骤 1:安装 NuGet 包
在项目中安装 SignalR 服务端包:
dotnet add package Microsoft.AspNetCore.SignalR
步骤 2:创建 Hub 类
Hub 是 SignalR 的核心类,负责处理客户端请求和广播消息。
新建一个类继承 Hub:
using Microsoft.AspNetCore.SignalR;
<p>public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}</p>步骤 3:注册 SignalR 服务和路由
在 Program.cs 中配置服务和中间件:
var builder = WebApplication.CreateBuilder(args);
<p>// 添加 SignalR 服务
builder.Services.AddSignalR();</p><p>var app = builder.Build();</p><p>app.UseRouting();</p><p>// 映射 Hub 路由
app.MapHub<ChatHub>("/chathub");</p><p>app.Run();</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/1852">
<img src="https://img.php.cn/upload/ai_manual/000/969/633/68b6c77ba67c5501.png" alt="Zyro AI Background Remover">
</a>
<div class="aritcle_card_info">
<a href="/ai/1852">Zyro AI Background Remover</a>
<p>Zyro推出的AI图片背景移除工具</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="Zyro AI Background Remover">
<span>145</span>
</div>
</div>
<a href="/ai/1852" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="Zyro AI Background Remover">
</a>
</div>
3. 客户端连接 SignalR(C# 控制台或 WPF 示例)
你可以使用 .NET 客户端连接到 SignalR 服务,比如控制台程序或 WPF 应用。
安装客户端包
dotnet add package Microsoft.AspNetCore.SignalR.Client
连接并接收消息
using Microsoft.AspNetCore.SignalR.Client; <p>var connection = new HubConnectionBuilder() .WithUrl("<a href="https://www.php.cn/link/7b7114a49b5827132d6097582ec1722d">https://www.php.cn/link/7b7114a49b5827132d6097582ec1722d</a>") .Build();</p><p>// 接收服务端推送的消息 connection.On<string, string>("ReceiveMessage", (user, message) => { Console.WriteLine($"{user}: {message}"); });</p><p>await connection.StartAsync();</p><p>// 发送消息 await connection.InvokeAsync("SendMessage", "Alice", "Hello World!");</p>
4. 常见应用场景与技巧
SignalR 不仅限于聊天功能,还可用于多种实时场景。
分组通信
将用户加入特定组,实现定向广播:
public override async Task OnConnectedAsync()
{
await Groups.AddToGroupAsync(Context.ConnectionId, "NewsGroup");
}
<p>// 向组内所有成员发送消息
await Clients.Group("NewsGroup").SendAsync("NewArticle", title);</p>身份验证
通过 JWT 或 Cookie 验证用户身份,Hub 中可访问 Context.User 获取用户信息。
确保在客户端连接时传递 token:
.WithUrl("https://www.php.cn/link/7b7114a49b5827132d6097582ec1722d", options =>
{
options.AccessTokenProvider = () => Task.FromResult("your-jwt-token");
})
错误处理与重连
添加重连逻辑提升稳定性:
connection.Closed += async (error) =>
{
await Task.Delay(5000);
await connection.StartAsync();
};
基本上就这些。SignalR 极大地简化了实时通信的开发流程,配合 C# 的强类型优势,能快速构建稳定高效的实时应用。只要理解 Hub 模型和客户端交互方式,就能灵活应用于各种业务场景。不复杂但容易忽略细节,比如连接生命周期管理和异常处理,建议结合日志监控完善健壮性。
以上就是C# 如何使用 SignalR 实现实时通信_C# SignalR 实时通信开发指南的详细内容,更多请关注其它相关文章!
# 你可以
# 亲姐妹营销号怎么做推广
# 胶州网站建设管理公司
# 网站推广工作福利有哪些
# 平山网站建设代理品牌
# 沅江网站建设公司
# 市场营销推广协议书范本
# 郴州网站网络推广哪家好
# 崇明网站建设哪家好
# 黄陵怎么优化关键词排名
# 网站营销推广溦鑫hfqjwl出词
# 如何在
# 就能
# 身份认证
# 如何实现
# 发送消息
# cookie
# 服务端
# 如何使用
# 是一个
# 客户端
# .net
# c#
# 日志监控
# microsoft
# 路由
# ai
# websocket
# access
# app
# 浏览器
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
如何使 Jest 模拟函数默认抛出错误以提高测试效率
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
HTML长属性值处理:表单action路径优化与代码规范应对
Composer如何在生产环境安全地执行composer update
python3时间如何用calendar输出?
在J*a中如何隐藏复杂性_使用门面模式组织对象交互
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
海棠电脑版入口_通过电脑访问海棠官网阅读
黑猫投诉统一入口官网 消费者权益保护投诉平台
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】
实现全屏滚动与导航点:专业教程
Go语言中JSON数据解析与字段访问教程
LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理
qq游戏跨平台入口_qq游戏多设备同步登录
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件
J*a里如何使用forEach遍历Map_Map遍历方法说明
如何有效阻止外部脚本意外修改内联样式的高度属性
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧
学习通网页版官方登录 超星学习通电脑端入口指南
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法
Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略
DLsite中文平台入口 DLsite官网内容在线查看
内存疯狂猛猛涨价:主板销量直接腰斩!
AO3官方可用镜像 Archive of Our Own网页版最新入口
免费抖音短视频入口_抖音网页版短视频免费通道
12306选座怎么选到商务座_12306商务座选择与配置说明
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
Tabulator表格日期时间排序问题及自定义解决方案
虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作
豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
夸克浏览器网页版最新地址 夸克浏览器官方入口合集
不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|
Win11怎么查看电脑配置_Win11硬件配置检测工具使用
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
Python实时数据流中的动态最值查找策略
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
2026春节假期时间安排 2026春节假日查询
手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠


2025-11-16
浏览次数:次
返回列表
etCore.SignalR.Client;
<p>var connection = new HubConnectionBuilder()
.WithUrl("<a href="https://www.php.cn/link/7b7114a49b5827132d6097582ec1722d">https://www.php.cn/link/7b7114a49b5827132d6097582ec1722d</a>")
.Build();</p><p>// 接收服务端推送的消息
connection.On<string, string>("ReceiveMessage", (user, message) =>
{
Console.WriteLine($"{user}: {message}");
});</p><p>await connection.StartAsync();</p><p>// 发送消息
await connection.InvokeAsync("SendMessage", "Alice", "Hello World!");</p>