.NET 9.0 SignalR 支持修剪和原生 AOT

什么是 SignalR?

SignalR 是一个库,可用于向应用程序添加实时 Web 功能。它提供了一个简单的 API,用于创建可从服务器和客户端调用的服务器到客户端远程过程调用 (RPC)。现在,SignalR 在 .NET 8.0 和 .NET 9.0 中支持修剪和原生 AOT。您可以在本文中了解更多关于SignalR 新功能的信息

什么是修剪和本机 AOT?

AOT(提前编译)功能允许您在运行应用程序之前将其编译为原生代码。这有助于提升性能并缩短启动时间。Triming 功能允许您从应用程序中移除未使用的代码,从而减小应用程序大小并提升性能。您可以在本文中了解更多关于原生 AOT 编译的信息

如何使用带有修剪和本机 AOT 的 SignalR?

您可以使用以下命令创建 ASP.NET Core AOT 应用程序:

dotnet new webapiaot -n Acme.Sample

创建的应用程序使用CreateSlimBuilder方法为其创建精简构建器。您可以使用CreateBuilder方法创建一个包含所有注册服务的构建器。但是,使用CreateSlimBuilder方法部署应用程序更方便,因为它可以减小应用程序的大小。您可以了解更多关于CreateSlimBuilder 与 CreateBuilder 的区别。

将文件替换Program.cs为以下代码:

using Microsoft.AspNetCore.SignalR;

using System.Text.Json.Serialization;

var builder = WebApplication.CreateSlimBuilder(args);

builder.Services.AddSignalR();

builder.Services.Configure<JsonHubProtocolOptions>(o =>

{

o.PayloadSerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default);

});

var app = builder.Build();

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

app.MapGet("/", () => Results.Content("""

<!DOCTYPE html>

<html>

<head>

<title>SignalR Chat</title>

</head>

<body>

<input id="userInput" placeholder="Enter your name" />

<input id="messageInput" placeholder="Type a message" />

<button οnclick="sendMessage()">Send</button>

<ul id="messages"></ul>

<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.7/signalr.min.js"></script>

<script>

const connection = new signalR.HubConnectionBuilder()

.withUrl("/chatHub")

.build();

connection.on("ReceiveMessage", (user, message) => {

const li = document.createElement("li");

li.textContent = `{user}: {message}`;

document.getElementById("messages").appendChild(li);

});

async function sendMessage() {

const user = document.getElementById("userInput").value;

const message = document.getElementById("messageInput").value;

await connection.invoke("SendMessage", user, message);

}

connection.start().catch(err => console.error(err));

</script>

</body>

</html>

在部署应用程序之前,请确保使用 C++ 进行桌面开发如果您使用的是 Windows 操作系统,则已安装在您的计算机上。有关更多详细信息,您可以查看先决条件

您可以使用以下命令部署应用程序:

dotnet publish -c Release

限制

由于我们使用的是 Native AOT,因此您应该注意一些限制:

• 仅支持 JSON 协议:SignalR 中的有效负载序列化仅支持 JSON 协议。您需要配置JsonHubProtocolOptions才能使用AppJsonSerializerContext进行序列化/反序列化。

• 反射:原生 AOT 不支持反射。您需要使用JsonSerializable属性来指定需要序列化/反序列化的类型。在本例中,我们已将JsonSerializable属性用于类string中的类型AppJsonSerializerContext。

更多详细信息,可以查看Native AOT 的限制

结论

在本文中,我们学习了如何在 .NET 8.0 和 .NET 9.0 中将 SignalR 与 Trimming 和 Native AOT 结合使用。我们创建了一个使用 SignalR 发送和接收消息的简单聊天应用程序。我们还讨论了使用 Native AOT 的局限性以及如何克服这些局限性。

更多信息可以参考微软的官方文档

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
程序设计实验室5 天前
纯 C#实现+AOT 打造的智能PDF目录提取工具 PdfTocExtractor
c#·aot
程序设计实验室19 天前
纯 C#实现+AOT 打造的多功能图片处理工具 ImageGlider
c#·aot
poemyang21 天前
“同声传译”还是“全文翻译”?为何HotSpot虚拟机仍要保留解释器?
java·java虚拟机·aot·编译原理·解释执行
爱吃香蕉的阿豪1 个月前
SignalR 全解析:核心原理、适用场景与 Vue + .NET Core 实战
vue.js·microsoft·c#·.netcore·signalr
csdn_aspnet2 个月前
使用 .NET Core 7 SignalR 构建实时聊天应用程序
signalr·.net7
csdn_aspnet2 个月前
升级到 .NET 9 分步指南
.net9
小书房2 个月前
Android的Dalvik和ART
android·aot·jit·art·dalvik
包达叔2 个月前
Admin.Net中的消息通信SignalR解释
signalr
带刺的坐椅3 个月前
启用 Java AOT 编译打包 Solon 项目(Solon AOT)
java·aot·solon·打包