C语言代码封装MQTT协议报文,了解MQTT协议通信过程

2023-07-29

如何在windows上用C语言实现MQTT协议

C语言是一门通用计返燃歼算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,漏冲一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。段握

coap协议和mqtt协议的优缺点?

??1、服务端主动发送给客户360问答端的数据(反控)的时效性(如通过APP控制硬件动作)

??因MQTT协议是保持连接的,所以及时性相对很好;CoAP协议是无连接响应式通讯,因此不能主动推送,要等客户端访问才可以携带回去,及时性相对较差。

??2、设备环境对底层协议的要求或限制

??MQTT协议是建立在TCP协议基础之上的,因此他也具备突创求TCP协议的优缺点;CoAP协议是建立在UDP协议基础之上的,因此他也具世滚备UDP协议的优缺点。

??3、在NAT网络环境中是否需要调整

??因MQTT协议是保持长连接的,所以在NAT下没有问题;CoAP协议因是无连接方式,需要使用NAT穿透性手段。

??4、实现多对多的通信还是单对单通信

??因MQTT协议的消载刑位硫浓息模型是发布/订阅式的,所以是可以多对多通信的;CoAP协议的消息模型是请求/响应式的,所以是单对单通信。

??5、服务质量等级及自动重连重发

因MQTT协议有QoS配置,支持服务质量等级和自动重连重发机制;CoAP本身不具备,需要应用层自己来写这个逻辑。??

??6、对网络稳定性要求

??巴望MQTT协议利用自动重连重发机制解决网络不稳定问题,断网就续读相养区修会触发重连;CoAP协议只有客户端发送的时候需要保证网络蚂模连接正常,其他时段无需连接。

??7、对硬件设备的功耗影响

??MQTT协议因有保持连接,所以功耗略高于CoAP协议闷返缓。

关于mosquitto怎么用c语言实现消息的订阅和发送(mqtt)

1.目标:测试Mosquitto使用MQTT协议发消息的相关性能指标,包含发送速度,并发负载能力,资源占用,消息到达率。
2.MQTT协议简介:
  1).建立长连接。客户端发起请求和服务端建立长连接,建立成功后,服务端会返回ACK(CONNACK)
  2).客户端订阅:客户端发起订阅,订阅成功后,服务端会返回ACK(SUBACK)
  3).发消息:发布者会给服务端发消息,服务端在把消息给合适的客户端。
Qos=0(服务质量):客户端消息收到后,不会发出ACK给服务端(PUBACK)。
       Qos =1:服务端会发ACK给发布者,客户端收到消息后会发ACK给服务端。
  4).取消订阅:客户端发起取消订阅,服务端返回ACK(UNSUBACK)  
  5)Pingreq&Pingresp:客户端和服务端会保持心跳。
3.存在问题:
  1. 如何模拟出40W的用户
  2. 如何长连接,订阅,发消息,取消订阅,Pingreq行为如何实现。
4. python开源库 Mosquitto.py,解决所有问题
  1. 模拟40W用户
    a)可以使用虚拟机和Mosquitto.py实现,具体为:一般一台虚拟机最多是6W+的模拟数据(需要修改句柄数,我使用5W),方法是Client_id可以简单的做出5W个来,然后调用Mosquitto里面的connect方法,建立长连接。准备8台虚拟机就可以实现40W客户端的模拟
  2.行为的模拟
    a)订阅:Mosquitto.subscribe / 发消息:Mosquitto.publish / 取消订阅:Mosquitto.unsubscribe。 简单一句话 Mosquitto库实现所有的行为.
5. 指标:发送速度,到达率,并发负载,资源占用。
  a. 发送速度:服务端日志记录,分析解决
  b. 到达率: 1.客户端记录下收到消息,分析计算。2.计算服务端收到的PUBACK(客户端收到消息返回的ACK),进行计算
  c. 并发负载:5W 用户不断增加,注意观察服务端的负载情况。
  e.资源占用:其实主要是cpu/mem/带宽:cpu多核的话需要观察top命令下的_id字段, mem可以观察free -h命令的剩余mem, 带宽可以使用mpstat进行观察
6. 可以遇见问题:
  a. 模拟客户端的虚拟机需要修改句柄数才能支持5W的客户端模拟数量
  b. 要先吃透MQTT协议的流程,吃透了进行测试会非常的方便
  c. Clear session,设置为true则不为客户端保留休息,设置为false保留消息。其实就是客户端离线后在连接上可以收到之前推出的消息。

文章推荐

相关推荐