如何在ASP.NetCore中使用SignalR

SignalR for ASP.Net Core 是 SignalR 的浴火重生版,允许你在 ASP.Net Core 中实现实时通讯,这里的 实时 意味着双方都能快速的感知对方发来的消息,比如:一旦 server 端有需要推送的内容将会直接 push 到 client,这和原始的 http 单向请求有着本质的区别。

值得注意的是, ASP.Net Core 版的 SingalR 移除了老版的诸多功能,比如:

  • 自动重连机制
  • 消息处理机制
  • 单连接多hub

不过无需担心,新版的 SingalR 在健壮性和易用性上做了非常大的改进,总的来说,新版本已不兼容老版本,而且新的 SingalR 客户端采用的是 TypeScript 。

安装 SingalR

要想使用 SingalR,需要通过 nuget 引用 Microsoft.AspNetCore.SignalR 包,可以通过 Visual Studio 2019 的 NuGet package manager 可视化界面安装 或者 通过 NuGet package manager 命令行工具输入以下命令:

 
 
 
 
  1. Install-Package Microsoft.AspNetCore.SignalR 

使用 SignalR broadcast现在我们一起实现一下如何在 ASP.Net Core 应用程序中使用 SignalR 的广播消息,那怎么做呢?创建一个自定义的 MessageHub 类并继承类库中的 Hub 基类,在 MessageHub 中定义一个 SendMessage 方法,该方法用于向所有已连接的客户端发送消息,如下代码所示:

 
 
 
 
  1. public class MessageHub : Hub 
  2.    { 
  3.        public async Task SendMessage(string user, string message) 
  4.        { 
  5.            await Clients.All.SendAsync("ReceiveMessage", user, message); 
  6.        } 
  7.    } 

配置 SignalR

要想在 ASP.Net Core 中使用 SignalR,只需在 Startup.ConfigureServices() 中调用扩展方法 AddSignalR() 将其注入到 ServiceCollection 中即可,如下代码所示:

 
 
 
 
  1. public class Startup 
  2.    { 
  3.        public Startup(IConfiguration configuration) 
  4.        { 
  5.            Configuration = configuration; 
  6.        } 
  7.  
  8.        public IConfiguration Configuration { get; } 
  9.  
  10.        // This method gets called by the runtime. Use this method to add services to the container. 
  11.        public void ConfigureServices(IServiceCollection services) 
  12.        { 
  13.            services.AddSignalR(); 
  14.            services.AddControllersWithViews(); 
  15.        } 
  16.    } 

为了能够启用 MessageHub,需要在 Startup.Configure 方法中添加如下代码:

 
 
 
 
  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  2.         { 
  3.             app.UseEndpoints(endpoints => 
  4.             { 
  5.                 endpoints.MapControllerRoute( 
  6.                     name: "default", 
  7.                     pattern: "{controller=Home}/{action=Index}/{id?}"); 
  8.  
  9.                 endpoints.MapHub("/messagehub"); 
  10.             }); 
  11.         } 

创建 SignalR client

SignalR 的 client 是任意的,意味着它可以是 html, windowform, wpf,console 甚至是 java 程序,它们都可以消费 server 端发来的消息,接下来准备创建一个 Console 程序尝试一下,那如何做呢?需要在 client 端引用 Microsoft.AspNetCore.SignalR.Client 和 System.Text.Encodings.Web 两个nuget包,如下代码所示:

 
 
 
 
  1. class Program 
  2.    { 
  3.        static async Task Main(string[] args) 
  4.        { 
  5.            HubConnection connection = new HubConnectionBuilder() 
  6.                .WithUrl("http://localhost:55215/messagehub") 
  7.                .Build(); 
  8.  
  9.            connection.On("ReceiveMessage", (user, message) => 
  10.            { 
  11.                var newMessage = $"{user}: {message}"; 
  12.  
  13.                Console.WriteLine(newMessage); 
  14.            }); 
  15.  
  16.            await connection.StartAsync(); 
  17.  
  18.            await connection.InvokeAsync("SendMessage", "jack", "hello,world"); 
  19.  
  20.            Console.ReadLine(); 
  21.        } 
  22.    } 

接下来就可以调试一下,分别启动 server 和 client 端,如下图所示:

server

 

client

 

译文链接:https://www.infoworld.com/article/3267165/how-to-use-signalr-in-aspnet-core.html

网页标题:如何在ASP.NetCore中使用SignalR
当前网址:http://www.csdahua.cn/qtweb/news42/387792.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网