ASP.NET MQTT 客户端通信
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.NET MQTT 客户端通信,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3466字,纯文字阅读大概需要5分钟。
内容图文
![ASP.NET MQTT 客户端通信](/upload/InfoBanner/zyjiaocheng/633/16f497dac5b641d6bad89693c2503ea8.jpg)
本篇文章采用的Mqtt 2.8.5类库 Visual Studio2019引用mqtt类库
对着新建的项目右键,管理Nuget程序包,搜索MQTTNet选择版本2.8.5点击安装![在这里插入图片描述](https://www.icode9.com/i/ll/?i=2020050514114361.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIzNTA2NjY=,size_16,color_FFFFFF,t_70) 了解MQTT常用事件以及属性
Connected 连接成功事件了解Qos 消息等级
Disconnected 断开连接事件
ApplicationMessageReceived 订阅事件
ClientId 客户端ID(唯一)
Topic 订阅主题(一个客户端可以订阅一个到多个主题,接收到的主题消息由订阅接收消息事件处理)
mqtt消息等级称Qos分三个等级
MqttQualityOfServiceLevel.AtMostOnce 最多一次 MqttQualityOfServiceLevel.AtLeastOnce 最少一次 MqttQualityOfServiceLevel.ExactlyOnce 只有一次
注意:当qos=MqttQualityOfServiceLevel.AtLeastOnce或MqttQualityOfServiceLevel.ExactlyOnce的时候,就遇到问题了. 想让设备重新连接,获取到mqtt保存的消息,需要设置cleansession=false,就是设备每次登陆,都是用同一个session,而没有发出去的消息,是放在内存里面的,跟session关联,这里问题就大了.消息堆积,内存就挂了.所以有些 消息,需要自己业务逻辑处理或定期清理防止内存爆满
下面展示一些 内联代码片
。
// mqtt客户端
private static MqttClient mqttClient;
//ClientId,同SessionId性质一样,是客户端的身份识别唯一标识
public string ClientId="";
static void Main(string[] args)
{
Console.WriteLine("===启动客户端MQTT===");
Console.Write("请输入ClientId:");
ClientId = Console.ReadLine().ToLower().Trim();
ConnectMqttService();
while (true)
{
if (mqttClient == null)
{
ConnectMqttService();
}
}
}
public static void ConnectMqttService()
{
try
{
if (mqttClient == null || !mqttClient.IsConnected)
{
mqttClient = new MqttFactory().CreateMqttClient() as MqttClient;
//连接成功
mqttClient.Connected += MqttClient_Connected;
//断开连接
mqttClient.Disconnected += MqttClient_Disconnected;
//订阅客户端或服务端发布的消息
mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived;
var options = new MqttClientOptions
{
ClientId = ClientId,
CleanSession = true,
ChannelOptions = new MqttClientTcpOptions
{
Server = "mqtt服务端ip地址",
Port = Convert.ToInt32(端口号)
}
};
Task.WaitAll(mqttClient.ConnectAsync(options));
MqttSubscribe();
}
}
catch (Exception ex)
{
Console.WriteLine($"客户端ID标识为Client100001的消息连接MQTT服务器异常:" + ex.ToString());
}
}
//MQTT发布消息 content消息内容
public static void MqttClientPublish(String content)
{
var msg = new MqttApplicationMessage()
{
Topic = "$Topic" + ClientId,
Payload = Encoding.UTF8.GetBytes(content),
//QOS 消息等级
QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce,
Retain = false
};
mqttClient.PublishAsync(msg);
}
//订阅MQTT消息
public static void MqttSubscribe()
{
mqttClient.SubscribeAsync(new List<TopicFilter> {
new TopicFilter("$Topic"+ClientId,MqttQualityOfServiceLevel.AtMostOnce)
});
}
//订阅接收消息事件
private static void MqttClient_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e)
{
//订阅内容
String Payload = System.Text.Encoding.Default.GetString(e.ApplicationMessage.Payload);
Console.WriteLine($"===订阅消息:{e.ClientId}内容:{Payload}===");
}
//mqtt断开连接两种形式 长时间订阅未接收到消息和服务端断开连接
private static void MqttClient_Disconnected(object sender, MqttClientDisconnectedEventArgs e)
{
Console.WriteLine($"====已断开MQTT服务器,断开时间{DateTime.Now.ToString()}====");
}
private static void MqttClient_Connected(object sender, MqttClientConnectedEventArgs e)
{
Console.WriteLine($"=====连接MQTT服务器成功,连接时间{DateTime.Now.ToString()}====");
}
内容总结
以上是互联网集市为您收集整理的ASP.NET MQTT 客户端通信全部内容,希望文章能够帮你解决ASP.NET MQTT 客户端通信所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。