.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 的局限性以及如何克服這些局限性。

更多信息可以參考微軟的官方文檔。

如果您喜歡此文章,請收藏、點贊、評論,謝謝,祝您快樂每一天。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86148.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86148.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86148.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

下載資源管理

本文章僅用于作者管理自己的站內資源&#xff0c;方便日后查找&#xff0c;后續更新資源該文章持續更新。 1、環境安裝 python3.11.11環境 python3.7.9 ARM.CMSIS.5.6.0(這個在站內重復上傳了) Nordic8.32.1 java8 2、工具類軟件安裝包 2.1、藍牙類 SI Connect 藍牙OT…

??FFmpeg命令全解析:三步完成視頻合并、精準裁剪??、英偉達顯卡加速

一、裁剪 常規裁剪 根據時長裁剪&#xff0c;常規的裁剪 -c copy 表示直接復制流&#xff08;不重新編碼&#xff09;&#xff0c;速度極快&#xff0c;但要求切割時間必須是關鍵幀。否則裁剪下來的畫面開頭/結尾 會模糊花屏 ffmpeg -i input.mp4 -ss 00:00:30 -to 00:01:00 …

HTML5 更新的功能

文章目錄 前言**一、語義化標簽&#xff08;Semantic Elements&#xff09;****二、多媒體支持&#xff08;Audio & Video&#xff09;****三、圖形與繪圖&#xff08;Canvas & SVG&#xff09;****1. <canvas>****2. SVG 內聯支持** **四、表單增強&#xff08;…

React 全面入門與進階實戰教程

文章目錄 一、認識 React1.1 核心特點 二、快速搭建 React 項目2.1 使用 Create React App2.2 使用 Vite 創建更輕量的 React 項目2.3 項目結構概覽 三、React 核心語法基礎3.1 JSX&#xff1a;React 的模板語法3.2 函數組件與 Props3.3 useState&#xff1a;定義響應式狀態3.4…

牛津大學開源視頻中的開放世界目標計數!

視頻中的開放世界目標計數 GitHub PaPer Niki Amini-Naieni nikianrobots.ox.ac.uk Andrew Zisserman azrobots.ox.ac.uk 視覺幾何組&#xff08;VGG&#xff09;&#xff0c;牛津大學&#xff0c;英國 ? 圖 1&#xff1a;視頻中的目標計數&#xff1a;給定頂行的視頻&#…

什么是Sentinel?以及優缺點

Sentinel 是阿里巴巴開源的分布式系統流量控制組件&#xff0c;主要用于服務限流、熔斷降級、系統負載保護等場景&#xff0c;幫助提高微服務系統的穩定性和可靠性。它以流量為切入點&#xff0c;通過對流量的監控與控制&#xff0c;保障服務在高并發或異常情況下的可用性。 S…

2025 MWC 上海盛大開幕,聚焦AI、5G-Advanced及開放API

全球商業領袖與政策制定者齊聚一堂,共同探討中國在API創新中的引領地位與產業發展勢頭 2025年6月18日,上海——GSMA 2025 MWC 上海今日在上海浦東嘉里大酒店舉行開幕式,正式拉開帷幕。本屆為期三天的盛會在上海新國際博覽中心(SNIEC)舉行,匯聚約400位演講嘉賓與思想領袖,帶來主…

使用Python腳本進行日常管理

在IT行業&#xff0c;特別是在系統運維領域&#xff0c;效率和準確性是至關重要的。隨著技術的發展&#xff0c;手動處理大量的服務器和網絡設備變得越來越不可行。因此&#xff0c;自動化運維成為了解決這一問題的有效手段。Python&#xff0c;作為一種廣泛使用的編程語言&…

HCIA-數據通信基礎

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 本篇筆記是根據B站上的視頻教程整理而成&#xff0c;感謝UP主的精彩講解&#xff01;如果需要了解更多細節&#xff0c;可以參考以下視頻&#xff1a;…

安全版V4.5密碼加密算法由SM3改為MD5

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5 文檔用途 本文檔用于指導瀚高數據庫安全版V4.5的密碼加密算法由SM3改為MD5 詳細信息 1、用默認三權用戶和普通用戶登錄數據庫&#xff0c;修改密碼…

MyBatis中#{}和${}的深度解析:SQL注入與動態拼接的終極抉擇

MyBatis中#{}和${}的深度解析&#xff1a;SQL注入與動態拼接的終極抉擇 摘要&#xff1a;在MyBatis的Mapper.xml文件中&#xff0c;#{}和${}這兩個看似簡單的符號&#xff0c;卻隱藏著SQL安全與性能的核心秘密。本文將深入剖析它們的底層差異&#xff0c;并通過真實場景演示如何…

AWS多項目架構完全指南:基于App Runner的安全中轉服務設計

引言:云原生架構的演進之路 在數字化轉型浪潮中,企業常常面臨這樣的挑戰:如何在保證安全隔離的前提下,快速為多個項目部署服務,并實現與現有系統的無縫集成?本文將以真實案例為基礎,詳細介紹如何利用AWS App Runner、Transit Gateway和VPC連接器等現代化服務,構建高可…

Selenium操作指南

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 大家好&#xff0c;今天帶大家一起系統的學習下模擬瀏覽器運行庫Selenium&#xff0c;它是一個用于Web自動化測試及爬蟲應用的重要工具。 Selenium測試直接運行在…

基于Qt開發的ModbusTcp主站軟件開發教程?——從協議原理到工業級實現

目錄 第一章 環境配置與庫集成1. 安裝Qt與Modbus模塊2. 第三方庫兼容性(備選方案)第二章 Modbus TCP協議與Qt類解析1. 協議核心要點2. Qt關鍵類說明第三章 主站連接管理與通信初始化1. 連接建立與斷線重連2. 請求超時與響應機制第四章 數據讀寫操作實戰1. 讀取保持寄存器(功…

什么是缺口箱線圖?如何繪制?

大家好&#xff0c;我是帶我去滑雪&#xff01; 箱線圖是一種用于展示數據分布特征的統計圖表&#xff0c;又稱為盒狀圖或盒須圖。它主要通過一個“箱子”和延伸出的“須”來展示一組數據的中位數、上下四分位數、最大值、最小值以及異常值。箱子的中線表示中位數&#xff0c;上…

在visual studio中為C++程序安裝缺失開源庫

在visual studio中測試一個代碼時出現include了一個之前沒用過的開源庫的情況&#xff0c;因為之前C用的少&#xff0c;這個問題比較基礎&#xff0c;也沒有找到能用的教程&#xff0c;就在這里記錄一下解決過程&#xff0c;以備不時之需。 顯然C和Visual Studio的組合不如pych…

CentOS加密技術全指南

文件系統加密 LUKS (Linux Unified Key Setup) 全盤加密配置方法 安裝前加密&#xff08;Anaconda安裝向導選項&#xff09; 在安裝CentOS時選擇"Encrypt my data"選項設置強密碼&#xff08;建議20字符&#xff0c;混合大小寫、數字和特殊符號&#xff09;密鑰槽管…

純血HarmonyOS5 打造小游戲實踐:繪畫板(附源文件)

OS 應用整體架構與技術棧 該繪圖應用采用了鴻蒙系統推薦的ArkUI框架進行開發&#xff0c;基于TypeScript語言編寫&#xff0c;充分利用了鴻蒙系統的圖形渲染和文件操作能力。應用整體架構遵循MVVM&#xff08;Model-View-ViewModel&#xff09;模式&#xff0c;通過State裝飾…

數據分析和可視化:Py爬蟲-XPath解析章節要點總結

重要知識點 XPath 概述&#xff1a;XPath 是一門可以在 XML 文件中查找信息的語言&#xff0c;也可用于 HTML 文件。它功能強大&#xff0c;提供簡潔明了的路徑表達式和多個函數&#xff0c;用于字符串、數值、時間比較等。1999 年成為 W3C 標準&#xff0c;常用于爬蟲中抓取網…

深入理解PHP中的生成器(Generators)

創建一個生成器非常簡單。你只需要像定義普通函數一樣定義它&#xff0c;但是使用yield關鍵字來產出值。例如&#xff0c;以下是一個簡單的斐波那契數列生成器&#xff1a; function fibonacci() {$num1 0;$num2 1;while (true) {yield $num1;$temp $num1 $num2;$num1 $n…