欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MQTT学习从零开始

程序员文章站 2022-07-03 18:15:07
...

0.起因

在这里先祝大家国庆愉快,MQTT协议第一次听说,还是一个做Java的老司机告诉我的,当时我还在实习,跟他学习了不少Spring的知识,话说新人配置Spring没有个1天估计连Hello,Word都跑不起来,现在接触了PHP、Golang的一些框架,才发现Spring 的配置真是很烦锁,也很复杂,真是浪费程序员的生命啊,在老司机的带领下,我知道了MQTT,主要了解到MQTT常用来做推送,维持心跳,当时也想跃跃一试,直到现在才真正了解MQTT。

1.MQTT介绍

MQTT是一个通信协议,可以实现机器之间通信,在物联网方面有着巨大的优势,在app推送、及时通信都有应用,云巴就是用的mqtt,详细的MQTT入门知识可以看看这篇文章
https://zhuanlan.zhihu.com/p/20888181

2.MQTT特性:

MQTT有以下几个特性

1、使用发布/订阅消息模式,提供一对多的消息发布
2、使用 TCP/IP 提供网络连接,在tcp之上,tcp和mqtt关系可以看这个链接
3、https://www.zhihu.com/question/23373904
4、有三种消息发布服务质量:

0:至多一次,“0”最不可靠,数据会丢失。
1: 至少一次,“1"数据丢失会重发,可能接受到多次数据。
2:只有一次,”2”数据只会发一次,最可靠,最好

小型传输,开销很小

3.Broker

Broker是什么?broker是代理,发布者发布消息到broker中,订阅都能过broker订阅消息,broker起到一个桥梁的作用,类似于tomcat、nginx,我本以为mqtt是用了tcp协议,可以像tcp一样直接写服务器端和客户端,并不需要这broker,如下图
MQTT学习从零开始broker的性能也是众说纷纭,看以下链接
mqtt各种broker如何选择?https://www.zhihu.com/question/27663804/answer/37782398
我尝试过用apollo作为broker,当把limit改为5000多时,apollo就承受不了了,emq是一个中国人做的broker,文档齐全,是用erlang写的,要装erlang环境没有试过,好像还做了负载均衡,不知道性能怎么样。
http://emqtt.com/products

4. 发布订阅

发布者既可以发布也可以订阅,同样的,订订阅者也是可以订阅和发布,这就实现了双方的通信,不难发现这在编程中很常见,是一个异步模式,这也是被用来做推送的原因,举个例子,我们打电话的时候,当对方不接听我们电话也就打不通,必须双方都在才可以通话,这是同步请求/回答,而mqtt则不需要对话的响应,这类似于发邮件,我们发邮件后,对方不一定就立即看到,等他有空的时候打开邮箱才看到,这就是异步发布/订阅的场景。

5. topic

什么是topic?tipic是一个字符串,topic是对消息进行分类,也就是发布者发布消息并且给了一个topic,订阅者通过topic接受到消息,比如有一个topic为“year/month/day”,这不跟url长的差不多嘛,也太好记了吧。topic是可以过虑的,有2个操作符,分别是“+”和“#”,“+”是单层匹配符,可以过滤掉一个层级,如topic是“student/+”,“student/girl”,"student/boy"可以满足条件,但是"student/girl/22"就不能满足条件了,因为 它比“student/+”多一个层级,这个时候topic改为“student/#”,那么 "student/girl/22"就可以满足条件了,因为“#”是多层级匹配,再多几个层级也没有关系。
注意点:

  • topic为“#”是有效的,它匹配所有topic
  • "#"匹配符包含它的上一级,比如“topic/#”,它会匹配“topic”
  • “topic/day#”是无效的,少了“/”
  • “topic/year/#/month”是无效的,"#"只能在topic最后。

6.最后

MQTT的基础先写到这里,实践过几天再写上,这是一份MQTT协议的中文版,内容非常好,感谢他们的贡献。https://www.gitbook.com/book/mcxiaoke/mqtt-cn/details


分割线

分享个vue学习的教程

本人亲自维护的接口

非常适合vue零基础或者刚入门vue的小白学习。

资源包括源码、视频、接口文档,从入门到实战项目

如果你想学习vue,这里有个项目线上尝鲜地址:http://129.226.76.172:5325


MQTT学习从零开始
MQTT学习从零开始
MQTT学习从零开始
MQTT学习从零开始MQTT学习从零开始