[db:标题]
摘要:项目地址:https:github.comhnlyf168DotNet.Framework Install-Package DotNetCN -Version 3.0.0 昨天晚上大致测试了下 ,490个客户端(一个收一个发) 平均
项目地址:https://github.com/hnlyf168/DotNet.Framework
Install-Package DotNetCN -Version 3.0.0
昨天晚上大致测试了下 ,490个客户端(一个收一个发) 平均估计每个每秒60个包使用mqtt协议发送一个guid的字符串服务器转发每秒大约1.2-1.3w
cpu占用:25%一下
内存好像都在50m以下
1、协议简介
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
具体就不在这里记录了,写这个服务端和客户端也只是为了更加深入的学习mqtt协议。
2、mqtt的几种控制报文类型
名字
值
报文流动方向
描述
Reserved
0
禁止
保留
CONNECT
1
客户端到服务端
客户端请求连接服务端
CONNACK
2
服务端到客户端
连接报文确认
PUBLISH
3
两个方向都允许
发布消息
PUBACK
4
两个方向都允许
QoS 1消息发布收到确认
PUBREC
5
两个方向都允许
发布收到(保证交付第一步)
PUBREL
6
两个方向都允许
发布释放(保证交付第二步)
PUBCOMP
7
两个方向都允许
QoS 2消息发布完成(保证交互第三步)
SUBSCRIBE
8
客户端到服务端
客户端订阅请求
SUBACK
9
服务端到客户端
订阅请求报文确认
UNSUBSCRIBE
10
客户端到服务端
客户端取消订阅请求
UNSUBACK
11
服务端到客户端
取消订阅报文确认
PINGREQ
12
客户端到服务端
心跳请求
PINGRESP
13
服务端到客户端
心跳响应
DISCONNECT
14
客户端到服务端
客户端断开连接
Reserved
15
禁止
保留
2.1、协议头
每个MQTT控制报文都包含一个固定报头,
固定报头的格式
Bit
7
6
5
4
3
2
1
0
byte 1
MQTT控制报文的类型
用于指定控制报文类型的标志位
byte 2...
剩余长度
剩余长度的计算方式:
剩余长度(Remaining Length)表示当前报文剩余部分的字节数,包括可变报头和负载的数据。剩余长度不包括用于编码剩余长度字段本身的字节数。
剩余长度字段使用一个变长度编码方案,对小于128的值它使用单字节编码。更大的值按下面的方式处理。低7位有效位用于编码数据,最高有效位用于指示是否有更多的字节。因此每个字节可以编码128个数值和一个延续位(continuation bit)。剩余长度字段最大4个字节
例如,十进制数64会被编码为一个字节,数值是64,十六进制表示为0x40,。十进制数字
321(=65+2*128)被编码为两个字节,最低有效位在前。第一个字节是 65+128=193。注意最高位为1表示后面至少还有一个字节。第二个字节是2。
