NetCore_signalR服务端

本文介绍了在VisualStudio2022和.NET6环境下,如何在WebApi项目中集成SignalR服务,添加SignalR服务,定义Hub处理类`WarningBroadcastHub`用于广播警告信息,以及配置主程序启动SignalRHub。虽然文中未涉及SignalR的工作原理,但展示了服务端的基本配置,为后续的客户端连接和通信奠定了基础。
摘要由CSDN通过智能技术生成

前提

本文不介绍关于SignalR的原理内容,比如如何实现的长连接,如何实现双工通信,如何实现向下兼容的通信等等

本文仅仅记录如何实现一个服务端

环境

  • IDE :visual Studio2022
  • 环境:.net6 webApi程序
  • 语言:C#10

nuget 包

没有引入其他包,因为是WebApi项目,所以默认的asp.net的包都引入了。

开始改造

Program 的main函数

 //增加SignalR的服务
 builder.Services.AddSignalR();
  //指定Hub的路径和处理类
  app.MapHub<WarningBroadcastHub>("/sr/warning_broadcast");

完整代码

using Demo_WarningMonitor.Api.Services;
using Demo_WarningMonitor.Api.SignalRHubs;
using Demo_WarningMonitor.Api.Workers;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting.WindowsServices;

namespace Demo_WarningMonitor.Api
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            IConfiguration configuration = builder.Configuration;

            var options = new WebApplicationOptions
            {
                Args = args,
                ContentRootPath = WindowsServiceHelpers.IsWindowsService()
                                    ? AppContext.BaseDirectory : default
            };

            // Add services to the container. 
            builder.Services.AddControllers();  
          
            builder.Services.AddSignalR();

            // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
            builder.Services.AddEndpointsApiExplorer();
            builder.Services.AddSwaggerGen();
 
            var app = builder.Build();

            // Configure the HTTP request pipeline.
            //if (app.Environment.IsDevelopment())
            //{
            app.UseSwagger();
            app.UseSwaggerUI();
            //}

            app.UseStaticFiles();

            app.UseHttpsRedirection();

            app.UseAuthorization();


            app.MapControllers();

            #region SignalR
            app.MapHub<WarningBroadcastHub>("/sr/warning_broadcast"); 
            #endregion 
            app.Run();
        }
    }
}

WarningBroadcastHub

一个自己定义的Hub处理类,继承自Hub

引入命名空间

using Microsoft.AspNetCore.SignalR;

完整代码

using Microsoft.AspNetCore.SignalR;

namespace Demo_WarningMonitor.Api.SignalRHubs
{
    /// <summary>
    /// 报警广播
    /// </summary>
    public class WarningBroadcastHub : Hub
    { 
        private ILogger<WarningBroadcastHub> logger; 

        public WarningBroadcastHub(ILogger<WarningBroadcastHub> logger, IConfiguration configuration)
        {
            this.logger = logger; 
        }

        public async Task SendMessage(string user, string message)
        {
            try
            {
                await Clients.All.SendAsync("ReceiveMessage", user, message);
            }
            catch (Exception ex)
            {
                logger.LogError(ex,"发送消息出现异常");
            }
          
        }
    }
}

结束语

到此为止一个服务端就做完了,运行起来也是看不到任何效果的。那么如何才能看到效果呢,请看下一篇文章

SignalR javascript 客户端

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为您提供一个示例,可以帮助您创建一个NetCore SignalR进度条:1.创建一个ASP.NET Core项目并安装Microsoft.AspNetCore.SignalR NuGet包。2.创建一个新的Hub类,用于处理客户端/服务器之间的连接:public class ProgressHub : Hub { public async Task SendProgress(int progress) { await Clients.All.SendAsync("UpdateProgress", progress); } }3.在Startup.cs文件中添加SignalR服务:public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); }4.在Startup.cs文件中添加SignalR路由:public void Configure(IApplicationBuilder app) { app.UseSignalR(routes => { routes.MapHub<ProgressHub>("/progress"); }); }5.在客户端创建一个连接:var connection = new signalR.HubConnectionBuilder() .withUrl("/progress") .build();6.从服务器接收更新:connection.on("UpdateProgress", (progress) => { // 更新进度条 });7.从客户端发送更新:connection.invoke("SendProgress", progress); ### 回答2: SignalR 是一个开发实时网络应用程序的框架,可以使服务器端代码推送内容到连接的客户端。要写一个 netcore SignalR 进度条,可以按照以下步骤进行: 1. 创建一个新的 ASP.NET Core 项目。在项目中使用 SignalR NuGet 包,以便可以方便地使用 SignalR 框架。 2. 在项目中创建一个名为 "ProgressHub" 的 SignalR Hub。这个 Hub 将用于与客户端建立连接,并用来更新进度条的值。 3. 在 ProgressHub 中创建一个名为 "UpdateProgress" 的方法,用于接收客户端发送的进度更新请求,并广播更新的进度条值给所有已连接的客户端。 4. 创建一个名为 "ProgressBar" 的 Razor Page 或一个视图,用于显示进度条。在该视图中,可以使用 JavaScript 和 SignalR 的 JavaScript 客户端库来订阅 ProgressHub 的进度更新方法,并显示更新的进度条值。 下面是一个简单的示例代码: ```csharp // ProgressHub.cs using Microsoft.AspNetCore.SignalR; using System.Threading.Tasks; namespace YourNamespace { public class ProgressHub : Hub { public async Task UpdateProgress(int value) { // 更新进度条 await Clients.All.SendAsync("UpdateProgressBar", value); } } } // ProgressBar.cshtml @page @model ProgressBarModel <script src="~/lib/signalr/dist/browser/signalr.js"></script> <h1>Progress Bar</h1> <div id="progressBar"></div> <script> const connection = new signalR.HubConnectionBuilder() .withUrl("/progressHub") .build(); connection.on("UpdateProgressBar", function (value) { document.getElementById("progressBar").innerText = `${value}%`; }); connection.start().catch(function (err) { return console.error(err.toString()); }); </script> ``` 这是一个简单的示例,当客户端连接到 SignalR Hub 并调用 UpdateProgress 方法时,进度条将更新并显示给所有客户端。你可以根据自己的需求进行进一步的修改和自定义。 ### 回答3: SignalR是一个强大的实时通信库,可以在Web应用程序中实现实时的多人协作和数据更新。我们可以利用SignalR来实现一个进度条的功能。 首先,我们需要创建一个ASP.NET Core Web应用程序。在Startup类的ConfigureServices方法中,我们需要注册SignalR服务,以便我们可以在应用程序中使用它。在Configure方法中,我们需要配置SignalR端点。 在项目中创建一个名为ProgressHub的SignalR Hub类。这个类将处理客户端的请求,并发送实时进度更新给客户端。在这个类中,我们可以定义一个名为"UpdateProgressBar"的方法,该方法将接收进度的更新,并将其广播给所有连接的客户端。 在客户端页面中,我们需要先引用SignalR的JavaScript库,然后创建一个连接到SignalR Hub的实例。我们可以使用Connection.on方法来监听来自ProgressHub的实时进度更新。然后,我们可以将这些更新显示在进度条中,以便用户可以实时查看进度。 接下来,我们可以在后台代码中模拟进度的变化。我们可以使用一个定时任务不断更新进度,并通过ProgressHub的UpdateProgressBar方法发送更新给客户端。在定时任务的每次运行中,我们可以计算当前的进度,并将其作为更新发送给客户端。 下面是一个简单的示例代码,可以实现一个使用SignalR的实时进度条: Startup.cs文件: ```csharp using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; namespace ProgressBarApp { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); } public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapHub<ProgressHub>("/progressHub"); }); } } } ``` ProgressHub.cs文件: ```csharp using Microsoft.AspNetCore.SignalR; using System.Threading.Tasks; namespace ProgressBarApp { public class ProgressHub : Hub { public async Task UpdateProgressBar(int progress) { await Clients.All.SendAsync("progressUpdate", progress); } } } ``` Index.cshtml文件: ```html <!DOCTYPE html> <html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="/signalr/hubs"></script> </head> <body> <div id="progressBar"></div> <script> $(function() { var connection = $.connection("/progressHub"); connection.on("progressUpdate", function(progress) { $("#progressBar").width(progress + "%"); }); connection.start(); }); </script> </body> </html> ``` 这样,一个使用SignalR实现的实时进度条就完成了。当后台进度更新时,客户端将实时收到更新,并将其反映在进度条上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值