如何在 ASP.Net Core 中使用 SignalR

DotNetCore实战

共 3296字,需浏览 7分钟

 · 2021-02-22


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 命令行工具输入以下命令:


Install-Package Microsoft.AspNetCore.SignalR

使用 SignalR broadcast

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


    public class MessageHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }

配置 SignalR

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


    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSignalR();
            services.AddControllersWithViews();
        }
    }

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


        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapHub("/messagehub");
            });
        }

创建 SignalR client

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


    class Program
    {
        static async Task Main(string[] args)
        {
            HubConnection connection = new HubConnectionBuilder()
                .WithUrl("http://localhost:55215/messagehub")
                .Build();

            connection.On<stringstring>("ReceiveMessage", (user, message) =>
            {
                var newMessage = $"{user}{message}";

                Console.WriteLine(newMessage);
            });

            await connection.StartAsync();

            await connection.InvokeAsync("SendMessage""jack""hello,world");

            Console.ReadLine();
        }
    }

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

server

client

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



往期精彩回顾




【推荐】.NET Core开发实战视频课程 ★★★

.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

【.NET Core微服务实战-统一身份认证】开篇及目录索引

Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)

.NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

10个小技巧助您写出高性能的ASP.NET Core代码

用abp vNext快速开发Quartz.NET定时任务管理界面

在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

现身说法:实际业务出发分析百亿数据量下的多表查询优化

关于C#异步编程你应该了解的几点建议

C#异步编程看这篇就够了


浏览 41
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报