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,连接上稍作改变就可以了。

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

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

(0)
上一篇 2022年6月25日 下午4:46
下一篇 2022年6月25日 下午4:46


相关推荐

  • C语言之三维数组

    C语言之三维数组前言 之前学习 C 语言的时候仅仅是掌握了二维数组 但是并没有对三维数组进行研究 今天的代码提前搞完了 摸摸鱼 对去年研究的三维数组的相关知识发布一下 期待能够帮助到有缘人 实际上 当你阅读此篇文章时 我假设你已经对 C 语言的二维数组非常熟悉了 并且非常熟悉数组与指针之间的关系 如果没有达到此要求 那直接翻篇 不要看 等待基础掌握扎实后再来学习此篇文章 一 看图说话 一眼看三维数组二 首先看下三维数组的遍历 include stdio h voidmain 三维数组

    2026年3月20日
    4
  • telnet远程登录服务器端口,telnet端口号-TELNET服务的端口号是多少?

    telnet远程登录服务器端口,telnet端口号-TELNET服务的端口号是多少?源端口是大于的随即端口 目的端口是 23 telnet 的默认端口号是多少查看端口在 windows xp server 中要查看端口 可以使用 netstat 命令 依次点击 开始 运行 键入 cmd 并回车 打开命令提示符窗口 在命令提示符状态下键入 netstat a n 按下回车键后就可以看到以数字形式显示的 tcp 和 udp 连接的端口号及状态 小知识 netstat 命令用法命令格式 netstat

    2026年3月20日
    1
  • linux 中增加路由(route)命令详解

    linux 中增加路由(route)命令详解linuxroute命令  显示现在所有路由  #route-n  root@Ubuntu:~#route  KernelIProutingtable  DestinationGatewayGenmaskFlagsMetricRefUseIface  10.147.9.0*255.255.255.0U100eth0  192.1…

    2022年7月18日
    17
  • 亲测效果:性价比最高的OpenClaw本地部署推荐

    亲测效果:性价比最高的OpenClaw本地部署推荐

    2026年3月16日
    2
  • 计算机错误代码0X000000be,电脑蓝屏0x000000be怎么解决

    计算机错误代码0X000000be,电脑蓝屏0x000000be怎么解决相信遇到过蓝屏的用户都知道,当蓝屏出现时,Windows操作系统的蓝屏死机提示已经成为标志性的画面,是令使用者颇为烦恼的电脑故障。用户遇到电脑蓝屏代码0x000000BE时何解?下面,小编就来跟大家介绍一下电脑蓝屏出现代码0x000000BE的解决方法。电脑蓝屏0x000000be怎么解决1、首先我们要知道0x000000BE错误表示硬件设备的驱动程序试图向只读内存错误地写入数据。这个错误一般是因…

    2022年10月8日
    8
  • 停机问题、哥德尔定理

    停机问题、哥德尔定理br 今天读 哥德尔 艾舍尔 巴赫 GEB 集异璧之大成 看到 自指 的论述 突然想起以前学自动机理论时的 停机问题 该问题上课前看书就看明白了 考试完了又忘了 后来又想起来看过一次 现在又忘了 可见 我是不懂装懂 br nbsp br 我之前其实没搞明白 怎么这么一个程序 H2 当作输入 P 给另一个 H2 后 它的存在性还受到另一个它的影响 每个 H2 不是可以有自己的输入么 这个递归 这个循环是如何实现的 br nbsp br 所谓自指 那么 关于它的陈述是全称量化的 也就是说 如果定义

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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