MQTTnet 소개

dotnet/MQTTnet은 MQTT 기반 통신을 위한 고성능 .NET 라이브러리로 MQTT의 취지에 맞게 경량이며 초당 150,000개 수준의 메시지를 처리하는 MQTT 클라이언트 및 MQTT 서버(브로커)를 제공합니다.

Azure Functions MQTT 바인딩에 쓰이는 라이브러리이며 .NET Foundation에서 지원하고 있습니다.

MQTT는 발행-구독 기반의 메시징 프로토콜로 IoT통신에 많이 쓰입니다. 공개된 MQTT 브로커가 많이 있으므로 메시징 기능을 간단하게 테스트하기도 용의합니다.

MQTTNet은 다음의 주요 특징을 가지고 있습니다.

  • 비동기 지원
  • 클라이언트 및 서버에 대한 TLS 지원
  • 확장 가능한 통신 채널 (In-Memory, TCP, TCP+TLS, WS)
  • 경량(오버헤드 없음)
  • 성능 최적화(~150,000개 메시지/초 처리)
  • 지원되는 모든 MQTT 프로토콜 버젼에 대한 동일한 API 제공
  • 내부 추적 메시지에 대한 액세스
  • 단위테스트 (~636 테스트)
  • 외부 종속성 없음

특히 웹소켓을 지원하기 때문에 웹소켓을 제공하는 브로커를 이용해 웹브라우저에서도 활용할 수 있는 메시징 프로토콜 입니다.


5개의 좋아요

깃허브의 Samples를 통해 각종 사용법을 학습할 수 있습니다.

다음은 broker.hivemq.com MQTT 브로커에 연결한 후 종료하는 코드 입니다.

using MQTTnet;
using MQTTnet.Client.Options;

using System.Text.Json;
using MQTTnet.Client.Disconnecting;

var factory = new MqttFactory();
using var client = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
    .WithTcpServer("broker.hivemq.com").Build();
var response = await client.ConnectAsync(options, CancellationToken.None);

var output = "NULL";
if (response != null)
{
    output = JsonSerializer.Serialize(response, new JsonSerializerOptions
    {
        WriteIndented = true
    });
}

Console.WriteLine($"[{response?.GetType().Name}]:\r\n{output}");

var disconnectOptions = new MqttClientDisconnectOptions();
await client.DisconnectAsync(disconnectOptions, CancellationToken.None);
MqttClientConnectResult]:
{
  "ResultCode": 0,
  "IsSessionPresent": false,
  "WildcardSubscriptionAvailable": true,
  "RetainAvailable": true,
  "AssignedClientIdentifier": null,
  "AuthenticationMethod": null,
  "AuthenticationData": null,
  "MaximumPacketSize": null,
  "ReasonString": null,
  "ReceiveMaximum": null,
  "MaximumQoS": 0,
  "ResponseInformation": null,
  "TopicAliasMaximum": 0,
  "ServerReference": null,
  "ServerKeepAlive": null,
  "SessionExpiryInterval": null,
  "SubscriptionIdentifiersAvailable": false,
  "SharedSubscriptionAvailable": false,
  "UserProperties": null
}

이 라이브러리를 이용해 서버 없이 정적 Blazor WASM으로 간단하게 채팅 프로그램 샘플을 만들어볼 예정입니다.

3개의 좋아요