实时网络应用程序需要客户端和服务器之间进行有效的通信。 ASP.NET Core SignalR 通过启用实时消息传递功能简化了这种通信。它广泛用于聊天应用程序、协作编辑工具、股票交易平台、实时体育更新和物联网仪表板,其中即时数据更新对于流畅的用户体验至关重要。
然而,在成千上万用户同时在聊天室互动或监控实时分析数据的场景中,单个服务器将难以应对连接管理和数据分发。为了克服这一瓶颈,我们使用 SignalR 后端来同步用户之间的消息。这就是 SignalR 后端的作用所在。 NCache 作为一种高性能、分布式缓存解决方案,它可确保整个网络场的无缝可扩展性和实时消息传递。
关键精华
扩展性限制: ASP.NET Core SignalR 需要一个后端来处理跨多个服务器的连接。
解决方案: NCache 用作内存分布式背板,以超低延迟同步消息。
优点: NCache 消除连接亲和性问题,防止消息丢失,并确保线性可扩展性。
实施: 通过 NuGet 包轻松安装,简单易用 应用设置.json 组态。
使用 ASP.NET Core 扩展 SignalR 面临哪些挑战?
SignalR 在单服务器环境中运行高效,可高效管理连接和实时消息传递。但是,当应用程序跨多台服务器扩展时,会出现一些挑战,其中一些挑战如下所述:
- 连接亲和性问题 – SignalR 使用 WebSockets 或其他传输机制建立持久连接。在多服务器环境中,负载均衡器可能会将客户端分布在不同的服务器上,从而导致消息同步问题。
- 消息丢失和不一致 – 由于 SignalR 不会在多个服务器之间本地同步消息,因此连接到一台服务器的客户端可能无法接收从另一台服务器发送的消息。
- 延迟增加 – 如果没有背板,服务器必须独立处理消息传递,这可能会导致延迟并给服务器带来不必要的压力。
- 传统解决方案的性能瓶颈 – 虽然 SQL Server 已被用作背板,但它引入了显著的延迟并且难以处理大量消息,因此不适合实时应用程序。
分布式背板可确保跨多个服务器的实时消息同步。背板不会让每个服务器管理自己的连接,而是创建一个共享通信通道,确保所有连接的客户端都能立即收到消息更新。这可最大限度地减少延迟、防止消息丢失并支持水平可扩展性。对于金融交易和多人游戏等高频应用,分布式背板对于提供一致且可靠的性能至关重要。
为何使用 NCache 作为 SignalR 背板?
NCache 是一种内存分布式缓存解决方案,可确保跨多个 SignalR 服务器的实时消息同步。使用 NCache 作为分布式背板允许 Web 应用程序水平扩展,而不会牺牲实时通信、可用性或性能。

图 1:架构 NCache 作为 SignalR 背板
以下特点 NCache 使其成为用作背板的理想选择:
- 高性能且可扩展 – NCache 线性扩展,允许随着需求的增加而无缝扩展,同时其内存架构可确保超低延迟,从而提高性能。
- 可靠高效的数据复制 – 对于金融交易等关键任务型应用, NCache 在多个节点上复制数据,以确保弹性并防止服务器故障期间数据丢失。
- 本机 .NET 支持 – 与 .NET 应用程序完全兼容,使其成为 ASP.NET Core SignalR 的理想之选。
- 实时发布/订阅消息 – 提供强大的发布/订阅功能,实现跨 Web 服务器的高效消息广播。
- 针对 SignalR 组和用户进行了优化 – 支持向群组和目标用户连接无缝发送消息。
- 持久连接和双向调用 – 维护活动连接并支持客户端和服务器之间的双向方法调用。
- 可靠消息传输 – 将内置传输层与保证的消息传递相结合,确保所有连接客户端之间的无缝、一致的通信。
通过整合 NCache 作为底板,SignalR 应用程序以最少的配置实现实时可扩展性,提供响应迅速且无缝的用户体验。
如何配置 NCache 作为 SignalR 背板
整合 NCache 将 SignalR 集成到您的 ASP.NET Core 应用程序非常简单,只需极少的代码更改。请按照以下步骤进行配置。 NCache 作为 SignalR 背板:
1。 安装 NCache SignalR NuGet 包
添加 NCache 使用以下命令将 SignalR 包到您的项目中:
|
1 |
Install-Package Alachisoft.NCache.SignalR |
2.修改appsettings.json
定义你的 NCache appsettings.json 中的配置设置:
|
1 2 3 4 |
{ "Cache": "demoCache" "EventKey": "Chat" } |
3。 寄存器 NCache 作为 SignalR 背板
修改 Startup.cs 以配置 SignalR 使用 NCache 作为背板:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using Alachisoft.NCache.SignalR; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Configuration; public class Startup { public void ConfigureServices(IServiceCollection services) { string cache = Configuration["Cache"]; string eventKey = Configuration["EventKey"]; // Register SignalR services services.AddSignalR() // Configure NCache as the distributed backplane using settings from appsettings.json .AddNCache(cache, eventKey); } } |
4. 部署和扩展
配置完成后,跨多个 Web 服务器部署应用程序,并且 NCache 将自动处理它们之间的消息同步。
性能优势 NCache 作为 SignalR 背板
运用 NCache 与其他背板解决方案相比,它具有多种性能优势:
| 特性 | NCache | SQL服务器 |
| 可扩展性 | 线性缩放 | 有限的扩展 |
| 延迟 | 低延迟 | 高延迟 |
| 可靠性 | 高可用性 | 容易出现瓶颈 |
| 本机 .NET 支持 | 是 | 是 |
如上表所示, NCache 通过利用内存架构实现线性可扩展性和更低的延迟,消除了与 SQL Server 后端相关的数据库瓶颈。
结语
为了处理高流量并确保跨多个服务器的流畅实时消息传递,高效扩展 ASP.NET Core SignalR 应用程序至关重要。 NCache 提供快速、可扩展且可靠的背板,消除瓶颈并提高整体性能。
通过整合 NCache 作为 SignalR 的底层架构,开发者只需进行极少的配置更改即可实现大规模实时消息传递。无论您是构建聊天应用程序、金融交易平台还是协作工具, NCache 确保为您的用户提供无缝且高度响应的体验。
更多详情,请参阅官方 NCache 文件.
常见问题
问:为什么扩展 ASP.NET Core SignalR 需要背板?
答:在多服务器环境中,连接到一台服务器的客户端无法接收来自其他服务器的消息。后端总线充当集中式消息总线,用于同步所有服务器上的消息,确保客户端无论连接到哪台服务器都能收到更新。
问:怎么做 NCache 与 SQL Server 作为 SignalR 后端相比如何?
答:虽然 SQL Server 可以作为后端服务器,但由于延迟较高、数据检索速度较慢,它经常会成为瓶颈。 NCache 是一个内存分布式缓存,为实时消息传递提供线性可扩展性、更高的可靠性和显著更低的延迟。
问:有 NCache 支持向特定 SignalR 群组和用户发送消息吗?
答:是的, NCache 针对 SignalR 进行了优化,支持向特定群组无缝广播消息,以及与单个用户建立定向连接。
问:使用需要进行哪些配置更改 NCache 使用 SignalR?
答:集成非常简单。您只需安装即可。 Alachisoft.NCache.SignalR NuGet 包中,定义缓存名称 应用设置.json,并注册 NCache ,在 启动文件 文件使用 AddNCache() 方法。
问:有 NCache 如何处理连接亲和性问题?
答:是的。在网络集群中,负载均衡器会将客户端分配到不同的服务器上, NCache 通过创建共享通信通道来解决连接亲和性问题,从而保证消息在整个集群中的传递。






