zoukankan      html  css  js  c++  java
  • MQTT开发小记(一)

    最近在协助公司硬件组进行MQTT协议的嵌入式SDK包开发。

    简述一下MQTT

    MQTT简单的来说是一种订阅/发布模式的通信形式,一般分为客户端和服务器端。

    MQTT服务器端可以简单理解为一个消息中转站,也可称作“消息中间件”。

    MQTT是在TCP层面上封装出的一种消息协议,所以如果从网络底层看,依然是现需要建立基本的TCP连接,然后在进行MQTT的连接、消息传递等。

    常规的通信形式是这样的:

    1、客户端通过MQTT协议与服务器进行连接

    2、客户端告知服务端,自己需要监听(订阅)何种消息来源(主题)的信息

    3、服务器收到客户端的订阅,进行记录

    4、如果客户端需要主动告诉服务端一些信息,则发送自定义的指定主题,与相对应的消息告知服务器,服务器端的处理逻辑再进行相应处理

    5、服务端如果想给客户端发送消息,则向客户端订阅的主题发送相应的信息

    由如上可知,MQTT的服务端可以实现,一次发送,告知多个订阅相同主题的客户端。即常见的手机信息推送。

    手机推送可以理解为,某个APP向服务端订阅了指定“主题”,服务端需要告知所有客户端消息时候,只需要发送相应主题的信息即可。

    非常的类似组播。

    如果想实现两个客户端的相互通信,也可以使用MQTT,这是MQTT服务端类似与一个消息转发器,接收两边的信息,并按照指定逻辑相互传递。

    由于存在MQTT服务器这个消息中间商,所以在一般的网络通信中,只要保证MQTT服务器的稳定在线,就可以保证所有客户端之间的通信或者消息的推送。

    所以,在实际的物联网工程中,存在很多利用GPRS传输的设备或者恶劣的网络条件,如果采用实时双工通信的方式,很可能会遗漏实时数据。

    如果采用了MQTT,设备即可在网络恢复的情况下,补发历时实时数据,由MQTT服务器进行储存,并在网络良好的情况下传递个下一个需要该数据的客户端。

    以上是对MQTT的粗浅理解。

    附上这几天的坑:

    1、MQTT的客户端发送的publish数据包如果存在“0000”,服务端会拒绝数据并且主动关闭连接

    2、MQTT的服务器不能同时接到同一客户端的两次连接请求,否则会在连接第二次的时候主动关闭连接

    3、千万不要给板子的GPRS等装置设置两次MQTT服务端的IP端口,否则会出现坑2的情况,并会造成publish的数据包严重错误

    4、善用wireshark,能帮你快速从tcp层面找到问题的所在

    以上

    转自:http://www.xjdsz.net/archives/28.html

  • 相关阅读:
    Spring基础知识
    Hibernate基础知识
    Struts2基础知识
    在eclipse里头用checkstyle检查项目出现 File contains tab characters (this is the first instance)原因
    java后台获取cookie里面值得方法
    ckplayer 中的style.swf 中的 style.xml 中的修改方法
    java hql case when 的用法
    Windows下Mongodb安装及配置
    Mongodb中经常出现的错误(汇总)child process failed, exited with error number
    Mac 安装mongodb
  • 原文地址:https://www.cnblogs.com/tilv37/p/5958221.html
Copyright © 2011-2022 走看看