當前位置: 華文頭條 > 推薦

一個用於.NET的高效能MQTT類別庫

2024-01-15推薦

在當今的物聯網時代,MQTT(Message Queuing Telemetry Transport)協定已經成為了連線各種器材和系統的主流協定之一。對於.NET開發者來說,選擇一個高效能、穩定且易於使用的MQTT庫至關重要。今天,我們將為大家推薦一個高效能的.NET庫——MQTTnet。

MQTTnet簡介

MQTTnet是一個基於.NET平台的開源庫,提供了對MQTT協定的全面支持。它具有簡單易用、高效能和可延伸性強的特點,非常適合用於構建即時、可靠的物聯網應用程式。

常規功能

  1. 1. 異步支持

  2. 2. 對客戶端和伺服器(但不是 UWP 伺服器)的 TLS 支持

  3. 3. 可延伸的通訊通道(例如 In-Memory、TCP、TCP+TLS、WS)

  4. 4. 輕量級(只有MQTT的底層實作,沒有開銷)

  5. 5. 效能最佳化(處理 ~150.000 條訊息/秒)

  6. 6. 無外部依賴關系

客戶端

  1. 1. 支持透過 TCP (+TLS) 或 WS (WebSocket) 進行通訊

  2. 2. 包括 ManagedMqttClient,它會自動維護連線和訂閱。此外,應用程式訊息會自動排隊並重新安排以獲得更高的 QoS 級別。

伺服器端

  1. 1. 支持同時連線不同協定版本的客戶端

  2. 2. 能夠釋出自己的訊息(無需環回客戶端)

  3. 3. 能夠接收每條訊息(無需環回客戶端)

  4. 4. 可延伸的客戶端憑據驗證

  5. 5. 支持保留訊息,包括透過介面方法持久化(需要自己的實作)

  6. 6. 支持 WebSockets(透過 ASP.NET Core )

  7. 7. 可以添加自訂訊息攔截器,該攔截器允許轉換或擴充套件每個接收到的應用程式訊息

  8. 8. 驗證訂閱並拒絕訂閱某些主題,具體取決於請求客戶端

MQTTnet的特點

高效能 :MQTTnet透過異步編程模型和高效的記憶體管理,實作了高效能的MQTT通訊。它能夠在各種網絡條件下保持穩定的效能表現,滿足大規模物聯網器材的需求。

易用性 :MQTTnet提供了簡單易用的API,使得開發者可以輕松地實作MQTT客戶端和伺服器端的開發。它還支持多種MQTT協定特性,如QoS(Quality of Service)、TLS/SSL加密等。

可延伸性 :MQTTnet采用模組化設計,方便開發者根據需求進行擴充套件。你可以透過編寫自訂的元件來處理訊息、實作自訂的認證機制等。

社區支持 :MQTTnet是一個開源專案,擁有活躍的社區支持。開發者可以在GitHub上檢視專案的原始碼,參與討論和貢獻程式碼。同時,社區還提供了豐富的文件和範例,幫助你快速上手。

如何使用MQTTnet

安裝MQTTnet NuGet包 :在Visual Studio中開啟解決方案,右鍵點選專案名稱,選擇「管理NuGet程式包」,搜尋並安裝MQTTnet。

配置MQTT連線參數 :設定MQTT broker的地址、埠、客戶端ID等連線參數。

建立MQTT客戶端 :使用MQTTnet提供的API建立MQTT客戶端例項。

連線MQTT broker :呼叫MQTT客戶端的Connect方法,建立與MQTT broker的連線。

釋出和訂閱訊息 :使用MQTT客戶端的Publish和Subscribe方法釋出和訂閱訊息。

斷開連線 :不再使用MQTT客戶端時,呼叫其Disconnect方法斷開與MQTT broker的連線

簡單範例

Install-Package MQTTnet

安裝完成後,你可以在.NET專案中引入MQTTnet的相關名稱空間,並開始編寫程式碼。以下是一個簡單的範例,展示了如何使用MQTTnet客戶端連線到MQTT伺服器並釋出訊息:

using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using System;
using System.Threading.Tasks;

class Program
{
static async Task Main(string[] args)
{
var options = new MqttClientOptionsBuilder()
.WithTcpServer("localhost", 1883) // 設定伺服器地址和埠號
.WithCleanSession() // 開啟新的會話清理模式
.Build(); // 建立配置選項例項
var client = new MqttFactory().CreateMqttClient(options); // 建立客戶端例項
try
{
await client.ConnectAsync(); // 連線伺服器
Console.WriteLine("Connected to MQTT server.");
var topic = "test/topic"; // 設定主題
var message = "Hello, MQTT!"; // 設定訊息內容
var qos = QosLevel.AtLeastOnce; // 設定QoS等級
await client.PublishAsync(topic, message, qos); // 釋出訊息
Console.WriteLine("Message published: {0}", message);
}
catch (MqttException ex)
{
Console.WriteLine("Error: {0}", ex.Message);
}
finally
{
await client.DisconnectAsync(); // 斷開連線
}
}
}

這個範例展示了如何使用MQTTnet客戶端連線到本地執行的MQTT伺服器,並釋出一條訊息到指定的主題上。你可以根據自己的需求修改程式碼,實作更復雜的MQTT通訊功能。其他更多案例建議看官方源碼。

源碼地址

https://github.com/dotnet/MQTTnet

版權聲明:本文來源於網絡素材收集整理或網友供稿,版權歸版權所有者所有,如有侵權請聯系小編予以刪除