C#的SignalR技术是什么?实现Web实时通信的C# SignalR框架教程

畫卷琴夢
发布: 2025-11-25 15:45:06
原创
752人浏览过
SignalR是ASP.NET的实时通信框架,自动管理连接并支持双向通信,通过Hub类实现消息广播,结合JavaScript客户端可快速构建聊天室等实时应用。

c#的signalr技术是什么?实现web实时通信的c# signalr框架教程

SignalR 是 ASP.NET 的一个开源库,它简化了在 Web 应用中添加实时功能的过程。通过 SignalR,服务器可以主动向客户端推送数据,而不需要客户端频繁轮询。这使得开发聊天应用、实时仪表盘、通知系统等变得非常高效和简单。

SignalR 是什么?

SignalR 是 C# 中用于实现 Web 实时通信的框架,属于 ASP.NET 生态的一部分。它封装了底层通信细节(如 WebSocket、Server-Sent Events、长轮询等),自动选择最佳传输方式,让开发者专注于业务逻辑。

主要特点包括:

  • 自动连接管理:客户端连接、断开、重连都由 SignalR 自动处理。
  • 双向通信:服务器可随时调用客户端方法,客户端也能调用服务器端方法。
  • 跨平台支持:支持 .NET 客户端、JavaScript 客户端,甚至可通过 REST 调用触发广播。
  • 高扩展性:可集成 Redis 等后端实现多服务器负载均衡。

创建一个简单的 SignalR 实时聊天示例

下面通过一个基础聊天室例子,演示如何使用 SignalR 实现服务端与前端的实时通信。

1. 创建 ASP.NET Core 项目

使用命令行创建新项目:

dotnet new web -n ChatApp
登录后复制

进入项目目录并添加 SignalR 包(.NET 6+ 已内置):

cd ChatApp
登录后复制

2. 创建 Hub 类

Hub 是 SignalR 的核心类,负责处理客户端和服务端之间的消息传递。

新建文件 ChatHub.cs

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>
登录后复制

上面代码定义了一个 SendMessage 方法,当被调用时,会将消息广播给所有连接的客户端(通过 ReceiveMessage 方法)。

3. 配置 Startup(或 Program.cs)

Program.cs 中注册 SignalR 服务和路由:

Levity
Levity

AI帮你自动化日常任务

Levity 206
查看详情 Levity
var builder = WebApplication.CreateBuilder(args);
<p>// 添加 SignalR 服务
builder.Services.AddSignalR();</p><p>var app = builder.Build();</p><p>app.UseStaticFiles(); // 支持 wwwroot 下的静态文件</p><p>app.MapHub<ChatHub>("/chathub");</p><p>app.Run();</p>
登录后复制

4. 添加前端页面

在项目根目录创建 wwwroot/index.html

<!DOCTYPE html>
<html>
<head>
    <title>SignalR 聊天室</title>
</head>
<body>
    <input type="text" id="userInput" placeholder="用户名" />
    <input type="text" id="messageInput" placeholder="输入消息" />
    <button onclick="sendMessage()">发送</button>
    <ul id="messagesList"></ul>
<pre class='brush:php;toolbar:false;'><!-- 引入 SignalR JavaScript 客户端 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/7.0.0/signalr.min.js"></script>
<script>
    const connection = new signalR.HubConnectionBuilder()
        .withUrl("/chathub")
        .build();

    // 启动连接
    connection.start().catch(err => console.error(err));

    // 接收消息
    connection.on("ReceiveMessage", function (user, message) {
        const li = document.createElement("li");
        li.textContent = `${user}: ${message}`;
        document.getElementById("messagesList").appendChild(li);
    });

    // 发送消息到服务器
    function sendMessage() {
        const user = document.getElementById("userInput").value;
        const message = document.getElementById("messageInput").value;
        connection.invoke("SendMessage", user, message).catch(err => console.error(err));
    }
</script>
登录后复制

</body> </html>

5. 运行项目

启动应用:

dotnet run
登录后复制

浏览器访问 http://localhost:5000,打开多个窗口即可看到实时聊天效果。

SignalR 的常见应用场景

SignalR 特别适合需要即时反馈的场景:

  • 在线聊天系统:群聊、私聊、状态提示。
  • 实时通知:订单更新、系统提醒、消息弹窗。
  • 数据仪表盘:股票行情、监控指标、投票统计。
  • 协作工具:文档协同编辑、白板共享。

注意事项与优化建议

使用 SignalR 时需注意以下几点:

  • 连接安全:使用 JWT 或 Cookie 认证,避免未授权访问。
  • 消息大小控制:避免推送大量数据导致性能下降。
  • 客户端兼容性:旧浏览器可能不支持 WebSocket,SignalR 会自动降级。
  • 部署集群:多服务器部署时需使用背板(如 Redis)同步消息。

基本上就这些。SignalR 极大地降低了实现实时通信的门槛,结合 C# 的强类型优势,能快速构建稳定高效的实时 Web 应用。不复杂但容易忽略的是连接生命周期管理和异常处理,建议在生产环境中加入日志和重试机制。

以上就是C#的SignalR技术是什么?实现Web实时通信的C# SignalR框架教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号