C#-网络通讯框架(三)-SignalR(SignalRCore版)_Net7

云逸星空科技工作室 / 2023-06-29 / 原文

一、概念

1、什么是 SignalR?

  ASP.NET Core SignalR 是一个开放源代码库,可用于简化向应用添加实时 Web 功能。 实时 Web 功能使服务器端代码能够将内容推送到客户端。

2、适合 SignalR 的场景

  • 需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖、地图和 GPS 应用。
  • 仪表板和监视应用。 示例包括公司仪表板、即时销售更新或旅行警报。
  • 协作应用。 协作应用的示例包括白板应用和团队会议软件。
  • 需要通知的应用。 社交网络、电子邮件、聊天、游戏、旅行警报和很多其他应用都需使用通知。

3、SignalR实时通信使用的传输技术(以下为使用的先后选择顺序,自动选择服务器和客户端能力范围内的最佳传输方法):

  • WebSockets
  • Server-Sent Events
  • 长轮询

4、SignalR支持的功能

  • 自动处理连接管理。
  • 同时向所有连接的客户端发送消息。 例如聊天室。
  • 向特定客户端或客户端组发送消息。
  • 对其进行缩放,以处理不断增加的流量。
  • SignalR中心协议(SignalR 使用 Hubs(中心协议) 在客户端和服务器之间进行通信;内置中心协议:基于JSON的文本协议 和 基于MessagePack 的二进制协议, 旧版浏览器必须支持XHR级别2 才能提供 MessagePack 协议支持。)

5、SignalR服务器与客户端标准:

  服务器标准:支持 ASP.NET Core 支持的任何服务器平台;如果服务器运行 IIS中,则 WebSockets 传输需要 Windows Server 2012 或更高版本上的 IIS 8.0 或更高版本。

  Web客户端标准:SignalR 面向 ES6。 对于不支持 ES6 的浏览器,请将库转译为 ES5。 有关详细信息,请参阅使用ES6入门 – 使用 Traceur和Babel 将 ES6转为ES5。

  .Net客户端标准:.NET 客户端可在 ASP.NET Core 支持的任何平台上运行(Xamarin.Android版本>8.4.0.1;Xamarin.iOS版本>11.14.0.4)。 

  Java 客户端标准:支持 Java 8 及更高版本。

二、示例:

  官方示例地址:SignalR-samples

1、JavaScript使用SignalR教程

  教程见:ASP.NET Core SignalR 入门

  代码地址:

2、TypeScript使用SignalR教程

  教程见:使用 TypeScript 和 Webpack 开始使用 ASP.NET Core SignalR

3、Blazor使用SignalR教程

  教程见:结合使用 ASP.NET Core SignalR 和 Blazor

4、WebAPI+Vue使用SignalR教程

  代码地址:

  Program.cs

using Microsoft.AspNetCore.SignalR;

...
//注入SignalR实时通讯,默认用json传输
builuer.Services.AddSignalR(options =>
{
    //客户端发保持连接请求到服务端最长间隔,默认30秒,改成4分钟,网页需跟着设置connection.keepAliveIntervalInMilliseconds = 12e4;即2分钟
    //options.ClientTimeoutInterval = TimeSpan.FromMinutes(4);
    //服务端发保持连接请求到客户端间隔,默认15秒,改成2分钟,网页需跟着设置connection.serverTimeoutInMilliseconds = 24e4;即4分钟
    //options.KeepAliveInterval = TimeSpan.FromMinutes(2);
});

  app.UseEndpoints(endpoints =>
     {
            
         endpoints.MapHub<MessageHub>("/msgHub");  //设置socket连接
     });

5、.Net客户端使用教程SignalR-WinForm/MAUI

  代码地址:

Install-Package Microsoft.AspNetCore.SignalR.Client