何时使用 ASP.NET Core SignalR

已完成

SignalR 提供实时 Web 功能。 回想一下,Contoso Pizza 需要实时地图来跟踪订单的状态和送达情况。 高峰时段的销售额损失促使团队调查比客户端轮询更好的解决方案。

决策条件

了解何时选择 SignalR 与了解何时应选择 SignalR 一样重要。 使用实时 Web 功能时,应用的用户体验依赖于其响应能力。 最好了解应用程序的哪些部分需要实时更新。

不应使用 SignalR 的情况

SignalR 的持久性取决于基础连接。 也就是说,如果有理由担心客户端应用程序的连接性,则 SignalR 并不是最佳选择。

另一个考虑因素是 SignalR 的可伸缩性。 根据并发连接的客户端数,Web 服务器在达到其限制时可能会发生资源争用。 在这种情况下,可能需要将应用程序部署到服务器场并使用底板。 自行实现此操作可能很繁琐。

或者,可以使用 Azure SignalR 服务解决此问题。 或者,可以利用各种复原能力和灾难恢复机制来缓解此问题。

SignalR 模态示例

可以在本地或云中使用 SignalR,也可以与 Azure SignalR 服务一起使用。

  • 本地:

    Diagram of ASP.NET Core SignalR being used on-premises.

  • 在云中:

    Diagram of ASP.NET Core SignalR being used in the cloud.

  • 与 Azure SignalR 服务一起:

    Diagram of using Azure SignalR Service.

有效用例

SignalR 不能替代传统的 HTTP 请求。 应用程序可以使用 SignalR 了解何时发出特定的 HTTP 请求。 这样一来,它们可以相互补充。

SignalR 有许多有效的用例。 以下列表表示 SignalR 的良好候选项:

  • 需要从服务器进行高频率更新的应用:
    • 游戏
    • 社交网络
    • Voting
    • 拍卖
    • GPS 应用
  • 仪表板和监视应用:
    • 公司仪表板
    • 实时地图
    • 即时销售更新
    • 旅行警报
    • 持续集成和持续交付 (CI/CD) 管道页
  • 协作式和多用户交互式应用:
    • 白板应用
    • 团队会议应用
    • 文档共享应用
    • Visual Studio Live Share
  • 需要即时通知的应用:
    • 电子邮件应用
    • 聊天应用
    • 基于轮次的游戏
    • 时序报告
    • GitHub Actions、发出和拉取请求系统

Contoso Pizza 方案

如果你在考虑 Contoso Pizza 实时订单地图中的客户端轮询解决方案,SignalR 可能是一种可行的替代方法。 与所有的编程和体系结构决策一样,请务必权衡 SignalR 的优点和缺点。