![cc75b22c59090febed04131f6514dc0e.png](https://i-blog.csdnimg.cn/blog_migrate/d243a7e5be84aa92ae8d625ce6a1046d.png)
这篇属于IM三剑客中的第二篇,前面一篇主要讲解了通用IM的一些架构的知识,这边主要讲解
MQTT
协议的细节,最后一篇将会着重介绍了MQTT Broker的Go语言实现。
- 通用IM架构
- Go实现Mqtt broker
MQTT协议以其效率高,语义完善而著名,非常适合使用在移动设备中,可以大幅度的减少耗电量。相对于TCP,语义更加丰富,额外的overload小,最少只需要2byte;相对于其他的应用层协议Websocket等,头部简单,包体积更小。
相关术语
Client(客户端)
客户端通常是用户手中的移动设备,传感器等,客户端在整个mqtt流程中既有publisher的作用,还有subscriber的作用,当作publisher的时候,客户端可以进行数据的上报,作为subscriber的时候,可以接收服务端推送的消息。
Session
持久化的回话,一个session对应一个client,session会把还未来得及投递的消息进行持久化,以便下次client连接时进行推送。
Broker
服务器端,client连接的对象,保存有所有的subscriber和publisher信息及其订阅关系,同时也用作消息的分发功能。
Subscription
订阅关系,client可以依据topic进行订阅,可以接收发布到该topic的信息。
Topic
Topic用作订阅关系的维系,类似于channel的概念。
Topic Filter
主题过滤器,在MQTT中,topic可以是精确订阅,也可以是模糊订阅,发布到一个topic的消息,通过主题过滤器获取所有匹配的topic进行投递。
Publisher
发布者,通常是客户端,向broker发布消息,borker收到消息后依据topic进行投递。
Subscriber
订阅者,通常是客户端,订阅topic以接收broker分发的消息。
数据解包
MQTT
数据包共分为三部分,FixedHeader
, Variable Header
和 Payload
, 其中只有FixedHeader
是必须的,Variable Header
和Payload
部分是可选的。这部分着重介绍FixedHeader
,可选部分将在下面的详细介绍中涉及。
固定头部的长度为2...5