mqttnet 详解_mqttnet 简记

mqttnet 详解_mqttnet 简记1.mqttnet开源库,https://github.com/chkr1011/MQTTnet2.服务器端和客户端服务器端和客户端两个,他们需要保持长连接,主要是通过订阅和发布来进行消息的传递交换。MQTT服务端主要用于与多个客户端保持连接,并处理客户端的发布和订阅等逻辑。一般很少直接从服务端发送消息给客户端(可以使用mqttServer.Publish(appMsg);直接发送消息),多…

大家好,又见面了,我是你们的朋友全栈君。

1.mqttnet开源库,https://github.com/chkr1011/MQTTnet

2.服务器端和客户端

服务器端和客户端两个,他们需要保持长连接,主要是通过订阅和发布来进行消息的传递交换。

MQTT 服务端主要用于与多个客户端保持连接,并处理客户端的发布和订阅等逻辑。一般很少直接从服务端发送消息给客户端(可以使用 mqttServer.Publish(appMsg); 直接发送消息),多数情况下服务端都是转发主题匹配的客户端消息,在系统中起到一个中介的作用。

而客户端主要是通过向服务端订阅它感兴趣(主题)的消息,另一些客户端向服务端发布(主题)消息,服务端将订阅和发布的主题进行匹配,并将消息转发给匹配通过的客户端。

3连接,通信

(1)服务器端启动服务:

public static IMqttServer mqttServer = null;

// 配置一个mqtt服务.

var optionsBuilder = new MqttServerOptionsBuilder()

//连接记录数,默认 一般为2000

.WithConnectionBacklog(2000)

//服务器连接端口

.WithDefaultEndpointPort(port)

//连接验证器

.WithConnectionValidator(ValidatingMqttClients())

//持续会话

.WithPersistentSessions()

;

// 建立一个MQTT服务.

mqttServer = new MqttFactory().CreateMqttServer();

mqttServer.ApplicationMessageReceived += MqttServer_ApplicationMessageReceived;

mqttServer.ClientSubscribedTopic += MqttServer_ClientSubscribedTopic;

mqttServer.ClientUnsubscribedTopic += MqttServer_ClientUnsubscribedTopic;

mqttServer.ClientConnected += MqttServer_ClientConnected;

mqttServer.ClientDisconnected += MqttServer_ClientDisconnected;

//启动mqtt服务

await Task.Run(async () => { await mqttServer.StartAsync(optionsBuilder.Build()); });

(2)客户端

与服务器端连接

连接语句:

private IMqttClient mqttClient = null;

//实例化 创建客户端对象

var Factory = new MqttFactory();

mqttClient = Factory.CreateMqttClient();

mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived;

mqttClient.Connected += MqttClient_Connected;

mqttClient.Disconnected += MqttClient_Disconnected;

//调用异步方法连接到服务端

await mqttClient.ConnectAsync(option());

option的信息设置:

public IMqttClientOptions option()

{

//连接到服务器前,获取所需要的MqttClientTcpOptions 对象的信息

var options = new MqttClientOptionsBuilder()

.WithClientId(ClientId)                    // clientid是设备id

.WithTcpServer(IP, Port)              //onenet ip:183.230.40.39    port:6002

.WithCredentials(UserName,pwd)      //username为产品id       密码为鉴权信息或者APIkey

//.WithTls()//服务器端没有启用加密协议,这里用tls的会提示协议异常

.WithCleanSession(false)

.WithKeepAlivePeriod(TimeSpan.FromSeconds(2000))

.Build();

return options;

}

连接上以后订阅主题:

mqttnet 详解_mqttnet 简记

发布主题:

mqttnet 详解_mqttnet 简记

4.

服务端支持 ClientConnected、ClientDisconnected 和 ApplicationMessageReceived 事件,分别用来检查客户端连接、客户端断开以及接收客户端发来的消息。

客户端支持 Connected、Disconnected 和 ApplicationMessageReceived 事件,用来处理客户端与服务端连接、客户端从服务端断开以及客户端收到消息的事情。

5.

通过 mqtt接入onenet,其实也就是把onenet 平台当做mqtt broker,连接上稍作改变就可以了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152849.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • clion激活码 2021激活码[在线序列号]

    clion激活码 2021激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Cloudflare 是谁?

    Cloudflare 是谁?

  • STL之Map的运用

    STL之Map的运用

    2021年11月17日
  • SNMP TRAP_Bootstrapping

    SNMP TRAP_Bootstrapping一、什么是SNMPTRAPSNMPtrap(SNMP陷阱):某种入口,到达该入口会使SNMP被管设备主动通知SNMP管理器,而不是等待SNMP管理器的再次轮询。在网管系统中,被管理设备中的代理可以在任何时候向网络管理工作站报告错误情况,例如预制定阈值越界程度等等。代理并不需要等到管理工作站为获得这些错误情况而轮询他的时候才会报告。正如人们用中断通知CPU数据的到达,而不是让CPU进行轮询一样。Trap通知是更加合理的选择。用一句话来说的话,SNMPTrap就是被管理设备主动发送消息给

  • jlink 与 swd 接口定义

    jlink 与 swd 接口定义1.JLink介绍J-Link是SEGGER公司为支持仿真ARM内核推出的JTAG仿真器。J-Link支持所有基于ARM架构的处理器或微控制器配合IAREWAR,ADS,KEIL等集成开发环境进行开发过程中进行单步控制执行调试。J-Link除了可以配合集成开发环境进行调试程序,进行程序下载之外,J-Link还可以单独使用。比如在产品的生产环节中,就可以单独使用J-Link进行固件的下载。JLink,SWD接口定义缺口向左,左边为JLink接口定义,右边为SWD接口定义JTAG

  • 线程用户态和内核态

    线程用户态和内核态(1)用户态和内核态的概念?—>内核态:CPU可以访问内存所有数据,包括外围设备,例如硬盘,网卡.CPU也可以将自己从一个程序切换到另一个程序—>用户态:只能受限的访问内存,且不允许访问外围设备.占用CPU的能力被剥夺,CPU资源可以被其他程序获取(2)为什么需要用户态和内核态?—>由于需要限制不同的程序之间的访问能力,防止他们获取别的程序的内存数据,…

    2022年10月26日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号