首页 > 编程语言 >asp.net core之实时应用

asp.net core之实时应用

时间:2023-08-04 16:44:59浏览次数:38  
标签:core asp Hub 应用程序 SignalR 实时 net 连接 客户端

本文将介绍ASP.NET Core SignalR,这是一个强大的实时通信库,用于构建实时、双向通信应用程序。我们将探讨SignalR的基本概念、架构和工作原理,并提供一些示例代码来帮助读者更好地理解和使用SignalR。
ASP.NET Core SignalR提供了一种简单而强大的方式来构建实时通信应用程序。SignalR支持多种传输方式,包括WebSockets、Server-Sent Events和长轮询,以确保在各种环境下实现实时通信。

SignalR基础知识

SignalR是一个开源的ASP.NET Core库,用于构建实时、双向通信应用程序。它允许服务器端代码主动向客户端推送数据,而不需要客户端发起请求。SignalR提供了一种简单的编程模型,使开发人员可以轻松地实现实时通信功能。
在使用SignalR之前,我们需要了解一些核心概念:

  • Hub:Hub是SignalR的核心组件,它负责处理客户端和服务器之间的通信。开发人员可以定义自己的Hub类,并在其中定义可以由客户端调用的方法。
  • 连接:连接表示客户端与服务器之间的连接。每个连接都有一个唯一的连接ID,用于标识特定的客户端。
  • 客户端:客户端是使用SignalR库的应用程序的一部分。客户端可以是Web浏览器、移动应用程序或其他支持SignalR的客户端。
  • 传输:传输是指SignalR用于在客户端和服务器之间传输数据的方式。SignalR支持多种传输方式,包括WebSockets、Server-Sent Events和长轮询。

SignalR架构和工作原理

SignalR的架构由以下几个核心组件组成:

  • 服务器:服务器端负责处理客户端的连接、消息传递和状态管理。
  • 客户端:客户端负责与服务器建立连接,并接收来自服务器的消息。
  • 传输:传输层负责在客户端和服务器之间传输数据。SignalR支持多种传输方式,可以根据环境自动选择最佳的传输方式。


SignalR的工作原理可以概括为以下几个步骤:

  1. 客户端发起连接请求。
  2. 服务器接受连接请求,并为该连接分配一个唯一的连接ID。
  3. 客户端与服务器建立连接。
  4. 客户端和服务器通过连接ID进行通信。
  5. 服务器可以主动向客户端推送消息。
  6. 客户端可以调用服务器端的方法。

使用SignalR构建实时应用程序

为了更好地理解和使用SignalR,我们将通过一个简单的示例来演示如何构建一个实时聊天应用程序。
首先,我们需要创建一个ASP.NET Core Web应用程序。可以使用Visual Studio或者命令行工具创建一个新的ASP.NET Core项目。
在ASP.NET Core高版本中AspNetCore.App默认已经内置了SingalR,直接就可以使用。

创建一个ASP.NET Core空模板,接下来,我们需要创建一个继承自Hub类的Hub。在这个Hub中,我们将定义可以由客户端调用的方法。以下是一个简单的示例:

using Microsoft.AspNetCore.SignalR;

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

        public override async Task OnConnectedAsync()
        {
            Console.WriteLine($"{Context.ConnectionId} Connected");
            await Clients.Caller.SendAsync("ReceiveMessage", "System", "Hello");
        }
    }
}


在Program.cs文件中,我们需要配置SignalR中间件。添加以下代码:

using LearnSignalR;
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSignalR();

var app = builder.Build();

app.MapHub<ChatHub>("/chat");

app.MapGet("/", () => "Hello World!");

app.Run();

创建一个Console控制台项目测试连接SignalR Hub。需要安装Microsoft.AspNetCore.SignalR.Client的Nuget包。
在客户端,我们可以使用JavaScript来连接到SignalR Hub,并与服务器进行通信。以下是一个简单的示例:

using Microsoft.AspNetCore.SignalR.Client;

var connection = new HubConnectionBuilder()
    .WithUrl("http://localhost:5192/chat")
    .Build();

connection.On<string, string>("ReceiveMessage", (user, message) =>
{
  var newMessage = $"{user}: {message}";
  Console.WriteLine($"{DateTime.Now}---{newMessage}");
});
await connection.StartAsync();

Thread.Sleep(int.MaxValue);

现在,我们可以运行应用程序。当一个客户端连接时立马会受到服务端发出的信息。
image.png
接下来改造一下控制台程序,使它可以发送消息。

using Microsoft.AspNetCore.SignalR.Client;

var connection = new HubConnectionBuilder()
    .WithUrl("http://localhost:5192/chat")
    .Build();

connection.On<string, string>("ReceiveMessage", (user, message) =>
{
    var newMessage = $"{user}: {message}";
    Console.WriteLine($"{DateTime.Now}---{newMessage}");
});
await connection.StartAsync();
Console.WriteLine("SetName:");
var userName = Console.ReadLine();
while (true)
{
    Console.WriteLine("Message:");
    var message = Console.ReadLine();
    await connection.InvokeAsync("SendMessage", userName, message);
}

测试效果。可以看到客户端正常接收和发送消息。
image.png

总结

本文详细介绍了ASP.NET Core SignalR的基本概念、架构和工作原理,并通过一个实时聊天应用程序的示例演示了如何使用SignalR构建实时应用程序。SignalR提供了一种简单而强大的方式来实现实时通信,可以在各种应用场景中发挥作用。通过深入了解SignalR,开发人员可以更好地利用其功能来构建实时、双向通信的应用程序。

欢迎进群催更。

image.png

标签:core,asp,Hub,应用程序,SignalR,实时,net,连接,客户端
From: https://www.cnblogs.com/fanshaoO/p/17606374.html

相关文章

  • Raspberry Pi(树莓派4B)4轻松入门(上)-安装
    1-RaspberryPi4入门RaspberryPi是一款功能齐全的计算机,包装小巧,价格实惠--虽然价格因计算能力而异,但基本的Pi4起价为35美元。无论您是想要一个可以用来执行日常计算任务的设备,如创建令人惊叹的程序、电路或控制其他物理设备,RaspberryPi都能满足需求。RaspberryPi品牌......
  • JetBrains Rider 2023.2 (macOS, Linux, Windows) - 快速且强大的跨平台 .NET IDE
    JetBrainsRider2023.2(macOS,Linux,Windows)-快速且强大的跨平台.NETIDE请访问原文链接:https://sysin.org/blog/jb-rider-2023/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsRider-快速且强大的跨平台.NETIDERider是什么?JetBrainsRider......
  • asp.net core之HttpClient
    本文介绍了ASP.NETCore中的HttpClient和HttpClientFactory的作用、用法以及最佳实践。通过示例代码的展示,读者可以了解如何使用HttpClient发送HTTP请求并处理响应,以及如何使用HttpClientFactory来解决HttpClient的一些问题,如资源泄漏和性能问题。同时,本文还强调了HttpClientFacto......
  • 十五、基于MQTT协议上传属性至ONENET Studio
    1.准备工作(1)下载MQTT透传固件(安心可官网下载即可)(2)下载MQTT固件到ESP82662.AT指令连接设备上传属性值(1)AT\r\n(2)AT+RST\r\n(3)AT+CWMODE=1\r\n(4)AT+CWDHCP=1,1\r\n(5)AT+CWJAP="WIFISSID","密码"\r\n//连接路由器(6)AT+MQTTUSERCFG=0,1,"设备名/设备id","产品I......
  • Windows运行命令之netstat命令详解
    一、简介netstat命令显示处于活动状态的TCP连接、计算机正在侦听的端口、以太网统计信息、IP路由表、用于IP、ICMP、TCP和UDP协议的IPv4统计信息和IPv6统计信息(IPv6、ICMPv6、TCPoverIPv6和UDPoverIPv6协议)。使用没有参数的情况下,此命令显示活动TCP连接。 二、命令示例1、nets......
  • NET7下的WEB API示例
    NET7下的WEBAPI示例 [Route("api/[controller]")][ApiController]publicclassShopADController:ControllerBase{privatereadonlyIRepository<Model.ShopAD,int>_shopAD;publicShopADController(IRepository&l......
  • .NET Core多线程 (1) Thread与Task
    去年换工作时系统复习了一下.NETCore多线程相关专题,学习了一线码农老哥的《.NET5多线程编程实战》课程,我将复习的知识进行了总结形成本专题。同时也特别推荐有兴趣的读者去学习一线码农老哥的《.NET5多线程编程》课程。本篇,我们来复习一下Thread与Task的相关知识点,预计阅读时......
  • .Net Core AlwaysRunResultFilter
    目录作用实现IAlwaysRunResultFilterIAsyncAlwaysRunResultFilterDemoCustomAsyncAlwaysRunResultFilterAttribute.cs全局注册Program.cs作用修改返回值,始终会触发,即使filter已经中断也会执行AlwaysRunFilter任何时刻都会执行一遍,可以在做了缓存的时候(如果有缓存并中......
  • .Net Core NLog+oracel
    目录简介引用Program.csNlog.config数据库测试简介NLog是一个灵活且免费的日志记录平台,适用于各种.NET平台,包括.NET标准。NLog使写入多个目标变得容易。(数据库、文件、控制台)并动态更改日志记录配置。引用<ItemGroup><PackageReferenceInclude="NLog"Version="5......
  • 【THM】OWASP 前10名—2021
    参考链接:https://www.cnblogs.com/Hekeats-L/p/16964401.html介绍该房间对每个OWASP主题进行了详细分析,并包含有关漏洞、它们如何发生以及如何利用它们的详细信息。您将通过完成支持性挑战将理论付诸实践。访问控制损坏加密失败注射不安全的设计安全配置错误易受攻击......