ASP.NET Core SignalR

ASP.NET Core SignalR是一个开发实时网络应用程序的框架,它使用WebSocket作为传输协议,并提供了一种简单和高效的方式来实现实时双向通信。

SignalR使用了一种称为"Hub"的概念来管理连接和消息的传递。开发者可以编写自己的Hub类,并定义可以由客户端调用的方法。客户端可以通过SignalR客户端库来连接到服务器上的Hub,并调用相应的方法。服务器端的Hub会接收和处理客户端的请求,并可以向客户端推送消息。

ASP.NET Core SignalR支持多种传输协议,包括WebSocket、Server-Sent Events(SSE)、长轮询(Long-polling)等。它会自动根据浏览器的支持和服务器配置来选择最佳的传输方式。当WebSocket不可用时,SignalR会自动回退到其他传输方式。

ASP.NET Core SignalR提供了一些强大的功能,例如群组(Group)管理、消息广播、连接保持、身份验证等。开发者可以利用这些功能来构建各种实时应用程序,比如聊天应用、实时数据监控、协同编辑等。

总结来说,ASP.NET Core SignalR是一个用于构建实时网络应用程序的框架,它使用WebSocket作为传输协议,提供了简单和高效的双向通信方式。它具有灵活的API和丰富的功能,适用于各种实时应用的开发需求。

下面是一个简单的示例,演示如何使用ASP.NET Core SignalR建立一个实时聊天应用程序。

  1. 创建一个新的ASP.NET Core Web应用程序项目。

  2. 在项目的Startup.cs文件中,添加以下代码来配置SignalR:

csharp 复制代码
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace SignalRDemo
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            // 添加SignalR服务
            services.AddSignalR();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();
            
            // 添加SignalR中间件
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapHub<ChatHub>("/chathub");
            });
        }
    }
}
  1. 创建一个名为ChatHub.cs的新文件,用于定义聊天的Hub:
csharp 复制代码
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

namespace SignalRDemo
{
    public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            // 调用所有客户端的接收消息的方法
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }
}
  1. 创建一个名为Index.cshtml的新文件,用于展示聊天室的界面:
html 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>SignalR Chat Demo</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="/chat.js"></script>
</head>
<body>
    <div>
        <input type="text" id="username" placeholder="Enter your name" />
        <input type="text" id="message" placeholder="Enter your message" />
        <button id="sendButton">Send</button>
    </div>
    <div id="chatBox"></div>
</body>
</html>
  1. 创建一个名为chat.js的新文件,用于处理聊天室的客户端逻辑:
javascript 复制代码
"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/chathub").build();

connection.on("ReceiveMessage", function (user, message) {
    var encodedUser = user;
    var encodedMessage = message;
    var li = document.createElement("li");
    li.textContent = encodedUser + " says: " + encodedMessage;
    document.getElementById("chatBox").appendChild(li);
});

document.getElementById("sendButton").addEventListener("click", function (event) {
    var user = document.getElementById("username").value;
    var message = document.getElementById("message").value;

    connection.invoke("SendMessage", user, message).catch(function (err) {
        return console.error(err.toString());
    });

    event.preventDefault();
});

connection.start().then(function () {
    console.log("Connected to chat hub");
}).catch(function (err) {
    console.error(err.toString());
});
  1. 运行ASP.NET Core应用程序。

现在,您可以访问http://localhost:5000来查看实时聊天室应用程序,多个客户端可以进行聊天并实时接收消息。

可以参考官网:https://learn.microsoft.com/zh-cn/aspnet/core/signalr/version-differences?view=aspnetcore-6.0

相关推荐
龚思凯4 分钟前
Node.js 模块导入语法变革全解析
后端·node.js
天行健的回响7 分钟前
枚举在实际开发中的使用小Tips
后端
wuhunyu12 分钟前
基于 langchain4j 的简易 RAG
后端
techzhi13 分钟前
SeaweedFS S3 Spring Boot Starter
java·spring boot·后端
写bug写bug1 小时前
手把手教你使用JConsole
java·后端·程序员
苏三说技术1 小时前
给你1亿的Redis key,如何高效统计?
后端
JohnYan2 小时前
工作笔记- 记一次MySQL数据移植表空间错误排除
数据库·后端·mysql
程序员清风2 小时前
阿里二面:Kafka 消费者消费消息慢(10 多分钟),会对 Kafka 有什么影响?
java·后端·面试
CodeSheep2 小时前
宇树科技,改名了!
前端·后端·程序员
hstar95273 小时前
三十五、面向对象底层逻辑-Spring MVC中AbstractXlsxStreamingView的设计
java·后端·spring·设计模式·架构·mvc