MQTT学习从零开始

作者: 想入飞飞___ | 来源:发表于2017-10-01 16:53 被阅读1087次

    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关系可以看这个链接https://www.zhihu.com/question/23373904
    3. 有三种消息发布服务质量:
      0:至多一次,“0”最不可靠,数据会丢失。
      1: 至少一次,“1"数据丢失会重发,可能接受到多次数据。
      2:只有一次,”2”数据只会发一次,最可靠,最好
    4. 小型传输,开销很小

    3.Broker

    Broker是什么?broker是代理,发布者发布消息到broker中,订阅都能过broker订阅消息,broker起到一个桥梁的作用,类似于tomcat、nginx,我本以为mqtt是用了tcp协议,可以像tcp一样直接写服务器端和客户端,并不需要这broker,如下图

    图是偷来的.png
    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

    相关文章

      网友评论

        本文标题:MQTT学习从零开始

        本文链接:https://www.haomeiwen.com/subject/tccaextx.html